本開示は、動きベクトル(MV)/動きベクトル差分(MVD)精度を適応的に決定するための技法を含む、MVおよび/またはMVDコーディングならびにシグナリングのための技法に関する。本明細書で説明される技法は、HEVCの拡張または次世代のビデオコーディング規格などの、先進的なビデオコーデックの文脈で使用され得る。
H.264およびH.265ビデオエンコーダならびにビデオデコーダは、1/4画素精度を有する動きベクトルをサポートする。1/4画素精度では、MVまたはMVDのための連続する符号語の値の間の差は、画素間の距離の1/4に等しい。同様に、1/8画素精度では、MVまたはMVDのための連続する符号語の値の間の差は、画素間の距離の1/8に等しい。整数画素精度では、MVまたはMVDのための連続する符号語の値の間の差は、フル画素の距離に等しい。
使用される画素精度は通常、シグナリングも導出もされず、代わりに固定されている(たとえば、事前に構成または決定される)。いくつかの事例では、1/8画素精度が、1/4画素精度または整数画素精度を上回るいくつかの優位性をもたらすことがある。しかしながら、1つ1つの動きベクトルを1/8画素精度で符号化することは、多数のコーディングビットを使用することがあり、このことは、1/8画素精度の動きベクトルにより別様にもたらされる利点より重いことがある。すなわち、1/8画素精度でMVまたはMVDをシグナリングするために必要とされるビットレートが、あらゆるひずみについての利益より重いことがある。いくつかのタイプのビデオコンテンツでは、まったく補間がない状態で、言い換えると、整数画素精度のみを使用して動きベクトルをコーディングすることが好ましいことがある。
コンピュータによって生成されるコンテンツ(たとえば、テキストまたは単純なグラフィクス)などのスクリーンコンテンツは通常、すべてが厳密に同じ画素値を有する一連の画素と、それに続く画素値の急激な変化とを伴う。たとえば、白い背景に青いテキストを含むスクリーンコンテンツでは、青い文字を形成する画素はすべて同じ画素値を有することがあり、また白い背景もすべて同じ画素値を有するが、白の画素値は青の画素値とは大きく異なることがある。対照的に、カメラで取得されたコンテンツ(たとえば、いわゆる自然画像)は通常、動き、影、照明の変化、および他の自然現象により、画素値の緩やかな変化を含む。スクリーンコンテンツおよびカメラで取得されたコンテンツは通常、特性が異なるので、あるタイプのコンテンツに効果的なコーディングツールが、他のタイプのコンテンツには必ずしも効果的ではないことがある。一例として、インター予測符号化のためのサブ画素補間は、カメラコンテンツのコーディングを改善することがあるが、それに関連する複雑さおよびシグナリングオーバーヘッドが実際に、スクリーンコンテンツのコーディング品質および/または帯域幅効率を下げることがある。
いくつかの例では、本開示の技法は、たとえばコーディングされているビデオのコンテンツ(たとえば、コンテンツのタイプ)に基づいて動きベクトル精度を適応的に決定することを含み得る。いくつかの例では、本開示の技法は、エンコーダによって、コーディングされているビデオコンテンツに対する適切な動きベクトル精度を導出することを含み得る。同じ導出技法を使用して、ビデオデコーダはまた、動きベクトル精度を示すシンタックス要素を受信することなく、ビデオデータを符号化するためにどの動きベクトル精度が使用されたかを決定することができる。他の例では、符号化されたビデオビットストリームにおいて、ビデオエンコーダによって選択される動きベクトル精度を、ビデオエンコーダがシグナリングする(かつビデオデコーダが受信する)ことができる。
動きベクトル精度を適応的に選択することは、より高い精度の動きベクトル(たとえば、1/4または1/8精度の動きベクトル)の使用が、たとえばより良好なレート-ひずみのトレードオフを生み出すことでビデオコーディング品質を改善する場合に、そのようなより高い精度の動きベクトルがビデオコンテンツに使用されることを可能にすることによって、ビデオコーディング品質全体を改善することができる。動きベクトル精度を適応的に選択することはまた、より高い精度の動きベクトルの使用がビデオコーディング品質を改善しない場合、または悪化すらさせる場合に、より低い精度の動きベクトル(たとえば、整数精度)の使用をビデオコンテンツに対して可能にすることによって、ビデオコーディング品質全体を改善することができる。
本開示の様々な技法はビデオコーダを参照して説明されることがあり、ビデオコーダは、ビデオエンコーダまたはビデオデコーダのいずれにも言及できる汎用的な用語であることが意図されている。別様に明確に述べられない限り、ビデオエンコーダまたはビデオデコーダに関して説明された技法は、ビデオエンコーダまたはビデオデコーダの他方によって実行できないと見なされるべきではない。たとえば、多くの事例において、ビデオデコーダは、符号化されたビデオデータを復号するために、ビデオエンコーダと同じ、または場合によっては逆のコーディング技法を実行する。多くの事例において、ビデオエンコーダはまた、ビデオ復号ループを含むので、ビデオエンコーダは、ビデオデータを符号化することの一部としてビデオ復号を実行する。したがって、別様に述べられない限り、ビデオデコーダに関して本開示において説明される技法は、ビデオエンコーダによっても実行されることがあり、その逆であることもある。
本開示はまた、現在のレイヤ、現在のブロック、現在のピクチャ、現在のスライスなどの用語を使用することがある。本開示の文脈では、現在という用語は、たとえば以前にコーディングされたレイヤ、ブロック、ピクチャおよびスライス、またはまだコーディングされていないブロック、ピクチャ、およびスライスとは対照的に、現在コーディングされているレイヤ、ブロック、ピクチャ、スライスなどを特定することが意図されている。
図1は、MVおよび/またはMVDをコーディングするために本開示の技法を利用することができる、例示的なビデオ符号化および復号システム10を示すブロック図である。図1に示されるように、システム10は、符号化されたビデオを、通信チャネル16を介して宛先デバイス14に送信するソースデバイス12を含む。ソースデバイス12および宛先デバイス14は、広範なデバイスのいずれかを備え得る。いくつかの場合、ソースデバイス12および宛先デバイス14は、ワイヤレスハンドセット、いわゆるセルラーもしくは衛星無線電話、またはビデオ情報を通信チャネル16上で通信することができる任意のワイヤレスデバイスなどのワイヤレス通信デバイスを備えることがあり、その場合、通信チャネル16はワイヤレスである。しかしながら、動きベクトルのための適応的なサブ画素精度をサポートするための技法に全般に関係する本開示の技法は、必ずしもワイヤレスの適用例または状況に限定されない。たとえば、これらの技法は、無線テレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、インターネットビデオ送信、記憶媒体へ符号化される符号化されたデジタルビデオ、または他のシナリオに適用され得る。したがって、通信チャネル16は、符号化されたビデオデータの送信に適した、ワイヤレスまたは有線の媒体の任意の組合せを備え得る。
図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、変調器/復調器(モデム)22と、送信機24とを含む。宛先デバイス14は、受信機26と、メモリ28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。本開示によれば、ソースデバイス12のビデオエンコーダ20は、MVおよび/またはMVDをコーディングおよび/またはシグナリングするための2つ以上の技法をサポートするための技法を適用するように構成され得る。他の例では、ソースデバイスおよび宛先デバイスは、他の構成要素または構成を含み得る。たとえば、ソースデバイス12は、外部カメラなどの外部ビデオソース18からビデオデータを受信し得る。同様に、宛先デバイス14は、統合されたディスプレイデバイスを含むのではなく、外部ディスプレイデバイスとインターフェースし得る。
図1の図示されたシステム10は一例にすぎない。MVおよび/またはMVDをコーディングおよび/またはシグナリングするための本開示の技法は、任意のデジタルビデオ符号化および/または復号デバイスによって実行され得る。一般に、本開示の技法はビデオ符号化デバイスによって実行されるが、技法はまた、通常は「コーデック」と呼ばれるビデオエンコーダ/デコーダによっても実行され得る。その上、本開示の技法はまた、ビデオプロセッサによっても実行され得る。ソースデバイス12および宛先デバイス14は、ソースデバイス12が宛先デバイス14への送信のためにコーディングされたビデオデータを生成するような、コーディングデバイスの例にすぎない。いくつかの例では、デバイス12、14は、デバイス12、14の各々がビデオ符号化および復号構成要素を含むように実質的に対称的に動作し得る。したがって、システム10は、たとえば、ビデオストリーミング、ビデオ再生、ビデオ放送、またはビデオ電話のための、ソースデバイス12と宛先デバイス14との間での一方向または双方向のビデオ送信をサポートし得る。
ソースデバイス12のビデオソース18は、ビデオカメラ、以前にキャプチャされたビデオを含むビデオアーカイブ、および/またはビデオコンテンツプロバイダからのビデオフィードなどのビデオキャプチャデバイスを含み得る。さらなる代替として、ビデオソース18は、ソースビデオとしてのコンピュータグラフィクスベースのデータ、またはライブビデオとアーカイブされたビデオとコンピュータで生成されたビデオとの組合せを生成し得る。いくつかの場合、ビデオソース18がビデオカメラである場合、ソースデバイス12および宛先デバイス14は、いわゆるカメラ電話またはビデオ電話を形成し得る。しかしながら、上述のように、本開示で説明される技法は、全般にビデオコーディングに適用可能であることがあり、ワイヤレスおよび/または有線の適用例に適用されることがある。各々の場合において、キャプチャされたビデオ、前にキャプチャされたビデオ、またはコンピュータにより生成されたビデオは、ビデオエンコーダ20によって符号化され得る。符号化されたビデオ情報は次いで、通信規格に従ってモデム22によって変調され、送信機24を介して宛先デバイス14に送信され得る。モデム22は、様々なミキサ、フィルタ、増幅器、または信号変調のために設計された他の構成要素を含み得る。送信機24は、増幅器、フィルタ、および1つまたは複数のアンテナを含む、データを送信するために設計された回路を含み得る。
宛先デバイス14の受信機26はチャネル16を通じて情報を受信し、モデム28はその情報を復調する。やはり、ビデオ符号化プロセスは、MVおよび/またはMVDをコーディングするための本明細書で説明される技法の1つまたは複数を実施し得る。チャネル16を通じて通信される情報は、ビデオエンコーダ20によって定義され、ビデオデコーダ30によっても使用される、シンタックス情報を含むことがあり、シンタックス情報は、マクロブロックおよび他のコーディングされた単位、たとえばピクチャグループ(GOP)の特性および/または処理を記述するシンタックス要素を含む。ディスプレイデバイス32は、復号されたビデオデータをユーザに表示し、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスのいずれかを備え得る。
図1の例では、通信チャネル16は、高周波(RF)スペクトルまたは1つまたは複数の物理的な伝送線路などの、任意のワイヤレス通信媒体もしくは有線通信媒体、またはワイヤレス媒体と有線媒体の任意の組合せを備え得る。通信チャネル16は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなどの、パケットベースネットワークの一部を形成し得る。通信チャネル16は一般に、ソースデバイス12から宛先デバイス14にビデオデータを送信するための、有線媒体またはワイヤレス媒体の任意の適切な組合せを含む、任意の適切な通信媒体、または異なる通信媒体の集合を表す。通信チャネル16は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を容易にするのに有用であり得る任意の他の機器を含み得る。
ビデオエンコーダ20およびビデオデコーダ30は、ビデオ圧縮規格に従って動作し得る。しかしながら、本開示の技法は、いかなる特定のコーディング規格にも限定されない。例示的な規格は、MPEG-4、Part 10、Advanced Video Coding (AVC)、MPEG-2およびITU-T H.263と代替的に呼ばれる、ITU-T H.265規格、ITU-T H.264規格を含む。図1には示されないが、いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は各々、オーディオエンコーダおよびオーディオデコーダと統合されることがあり、共通のデータストリームまたは別個のデータストリームの中のオーディオとビデオの両方の符号化を処理するために、適切なMUX-DEMUXユニット、または他のハードウェアおよびソフトウェアを含むことがある。適用可能な場合、MUX-DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
ビデオコーディング規格はさらに、そのスケーラブルビデオコーディング(SVC:Scalable Video Coding)拡張およびマルチビュービデオコーディング(MVC:Multi-view Video Coding)拡張を含む、ITU-T H.261、ISO/IEC MPEG-1 Visual、ITU-T H.262またはISO/IEC MPEG-2 Visual、ITU-T H.263、ISO/IEC MPEG-4 Visual、およびITU-T H.264(ISO/IEC MPEG-4 AVCとも呼ばれる)を含む。
加えて、新しいビデオコーディング規格、すなわちHigh Efficiency Video Coding(HEVC)が、ITU-T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on Video Coding(JCT-VC)によって最近開発された。以下でHEVC WDと呼ばれる最新のHEVCドラフト仕様は、http://phenix.int-evry.fr/jct/doc_end_user/documents/14_Vienna/wg11/JCTVC-N1003-v1.zipから入手可能である。完成したHEVC規格の複製(すなわち、AUDIOVISUAL AND MULTIMEDIA SYSTEMS、Infrastructure of audiovisual services - Coding of moving video、2015年4月)が、https://www.itu.int/rec/T-REC-H.265-201504-I/enにおいて入手可能である。
ITU-T VCEG(Q6/16)およびISO/IEC MPEG(JTC 1/SC 29/WG 11)は、現在のHEVC規格(その現在の拡張ならびにスクリーンコンテンツコーディングおよびハイダイナミックレンジコーディングのための目先の拡張を含む)の圧縮能力を大きく超える圧縮能力を有する、将来のビデオコーディング技術の標準化の潜在的な必要性について現在研究している。このグループは、この分野の専門家により提案されている圧縮技術の設計を評価するために、Joint Video Exploration Team(JVET)として知られている共同研究においてこの調査活動に一緒に取り組んでいる。JVETは、2015年10月19~21日に最初の会合を開いた。そして、参照ソフトウェアの最新のバージョン、すなわちJoint Exploration Model 3 (JEM 3.0)は、https://jvet.hhi.fraunhofer.de/svn/svn_HMJEMSoftware/tags/HM-16.6-JEM-3.0/からダウンロードすることができる。
Joint Exploration Test Model 3 (JEM3)のアルゴリズム記述は、J.Chen他、「Algorithm Description of Joint Exploration Test Model 3」、Joint Video Exploration Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11、第3回会合:ジュネーブ、スイス、2016年5月26日~6月1日、JVET-C1001に記載されている。
ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せなどの、様々な適切なエンコーダ回路またはデコーダ回路のいずれかとして実装され得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれることがあり、それらのいずれもが、それぞれのカメラ、コンピュータ、モバイルデバイス、加入者デバイス、ブロードキャストデバイス、セットトップボックス、サーバなどにおいて、複合エンコーダ/デコーダ(コーデック)の一部として統合されることがある。
ビデオシーケンスは通常、一連のビデオフレームを含む。ピクチャグループ(GOP)は一般に、一連の1つまたは複数のビデオフレームを備える。GOPは、GOPに含まれるピクチャの数を記述するシンタックスデータを、GOPのヘッダ、GOPの1つまたは複数のフレームのヘッダ、または他の場所に含み得る。各フレームは、それぞれのフレームのための符号化モードを記述するフレームシンタックスデータを含み得る。ビデオエンコーダ20は通常、ビデオデータを符号化するために、個々のビデオフレーム内のビデオブロックに対して動作する。H.264では、ビデオブロックはマクロブロックまたはマクロブロックのある区分に相当し得る。ビデオブロックは固定サイズまたは可変サイズを有することがあり、指定されたコーディング規格に従ってサイズが異なることがある。各ビデオフレームは複数のスライスを含み得る。各スライスは複数のマクロブロックを含むことがあり、これらはサブブロックとも呼ばれる複数の区分へと編成されることがある。
ある例として、ITU-T H.264規格は、輝度成分に対して16対16、8対8、または4対4、および色差成分に対して8×8などの様々なブロックサイズでのイントラ予測、ならびに輝度成分に対して16×16、16×8、8×16、8×8、8×4、4×8および4×4、および色差成分に対して対応するスケーリングされたサイズなどの、様々なブロックサイズでのインター予測をサポートする。本開示では、「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と等しいとは限らない。
16対16よりも小さいブロックサイズは、16対16のマクロブロックの区分と呼ばれることがある。ビデオブロックは、画素領域における画素データのブロック、または、たとえば、離散コサイン変換(DCT)、整数変換、ウェーブレット変換、またはコーディングされたビデオブロックと予測ビデオブロックとの間の画素差分を表す残差ビデオブロックデータへの概念的に類似の変換などの、変換の適用の後の、変換領域における変換係数のブロックを備え得る。いくつかの場合、ビデオブロックは、変換領域における量子化された変換係数のブロックを備え得る。
より小さいビデオブロックは、より良い解像度をもたらすことができ、高いレベルの詳細を含むビデオフレームの場所に対して使用され得る。一般に、サブブロックと呼ばれることがあるマクロブロックおよび様々な区分は、ビデオブロックと見なされ得る。加えて、スライスが、マクロブロックおよび/またはサブブロックなどの複数のビデオブロックであるものと見なされ得る。各スライスは、ビデオフレームの独立に復号可能な単位であり得る。あるいは、フレーム自体が復号可能な単位であることがあり、またはフレームの他の部分が復号可能な単位として定義されることがある。「コーディングされた単位」という用語は、フレーム全体、フレームのスライス、シーケンスとも呼ばれるピクチャグループ(GOP)、または適用可能なコーディング技法に従って定義される独立に復号可能な別の単位などの、ビデオフレームの任意の独立に復号可能な単位を指すことがある。
上で論じられたように、ITU-T H.265、High Efficiency Video Coding (HEVC)と呼ばれる新しいビデオコーディング規格が完成した。HEVCへの拡張は、スクリーンコンテンツコーディング拡張を含む。HEVCの規格化作業は、HEVC Test Model (HM)と呼ばれるビデオコーディングデバイスのモデルに基づいた。HMは、たとえば、ITU-T H.264/AVCに従う既存のデバイスを超える、ビデオコーディングデバイスのいくつかの能力を仮定する。たとえば、H.264は、9個のイントラ予測符号化モードを提供する一方で、HMは、33個ものイントラ予測符号化モードを提供する。
HMはビデオデータのブロックをコーディング単位(CU)と呼ぶ。ビットストリーム内のシンタックスデータは、画素の数に関して最大のコーディング単位である、最大コーディング単位(LCU)を定義し得る。一般に、CUは、CUにサイズの差異がないことを除いて、H.264のマクロブロックと同様の目的を有する。したがって、CUはサブCUに分割され得る。一般に、本開示におけるCUへの言及は、ピクチャの最大コーディング単位、またはLCUのサブCUを指すことがある。LCUはサブCUに分割されることがあり、各サブCUはサブCUに分割されることがある。ビットストリームのためのシンタックスデータは、CU深度と呼ばれる、LCUが分割され得る最大の回数を定義し得る。したがって、ビットストリームはまた、最小コーディング単位(SCU)を定義し得る。本開示はまた、「ブロック」という用語を使用して、CU、PU、またはTUのいずれかを指す。その上、本開示はコーディング単位またはCUに関与する例に言及するが、他の例は、コーディング単位の代わりにマクロブロックに関して提供され得ることを理解されたい。
LCUは、4分木データ構造と関連付けられ得る。一般に、4分木データ構造は、CUごとに1つのノードを含み、ルートノードはLCUに対応する。CUが4つのサブCUに分割される場合、CUに対応するノードは4つのリーフノードを含み、その各々がサブCUのうちの1つに対応する。4分木データ構造の各ノードは、対応するCUのためのシンタックスデータを提供し得る。たとえば、4分木におけるノードは、ノードに対応するCUがサブCUに分割されるかどうかを示す分割フラグを含み得る。CUのためのシンタックス要素は、再帰的に定義されることがあり、CUがサブCUに分割されるかどうかに依存することがある。
分割されないCU(たとえば、4分木データ構造におけるリーフノードに対応する)は、1つまたは複数の予測単位(PU)を含み得る。一般に、PUは、対応するCUのすべてまたは一部分を表し、PUのための参照サンプルを取り出すためのデータを含む。たとえば、PUがイントラモード符号化されるとき、PUは、PUのイントラ予測モードを記述するデータを含み得る。別の例として、PUがインターモード符号化されるとき、PUは、PUの動きベクトルを定義するデータを含み得る。動きベクトルを定義するデータは、たとえば、動きベクトルの水平成分、動きベクトルの垂直成分、動きベクトルの解像度(たとえば、整数画素精度、1/4画素精度、1/8画素精度)、動きベクトルが指す参照フレーム、および/または動きベクトルのための参照リスト(たとえば、リスト0もしくはリスト1)を記述し得る。PUを定義するCUのためのデータはまた、たとえば、1つまたは複数のPUへのCUの区分を記述し得る。区分モードは、CUがコーディングされないか、イントラ予測モード符号化されるか、またはインター予測モード符号化されるかで異なり得る。
1つまたは複数のPUを有するCUはまた、1つまたは複数の変換単位(TU)を含み得る。PUを使用した予測に続いて、ビデオエンコーダは、PUに対応するCUの部分に対する残差値を計算し得る。この残差値は、変換され、量子化され、スキャンされ得る。TUは、必ずしもPUのサイズに限定されるとは限らない。したがって、TUは同じCUのための対応するPUより大きいことがあり、または小さいことがある。いくつかの例では、TUの最大サイズは、TUを含むCUのサイズに対応し得る。
インター予測を使用してPUをコーディングすることは、現在のブロックと参照フレームの中のブロックとの間の動きベクトルを計算することを伴う。動きベクトルは、動き推定(または動き探索)と呼ばれるプロセスを通じて計算される。動きベクトルは、たとえば、参照フレームの参照サンプルに対する現在のフレームの中の予測単位の変位を示し得る。参照サンプルは、絶対差分和(SAD)、2乗差分和(SSD)、または他の差分尺度によって決定され得る画素差分に関して、コーディングされているPUを含むCUの部分と厳密に一致していることが見出されるブロックであり得る。参照サンプルは、参照フレームまたは参照スライス内のどこでも生じ得る。いくつかの例では、参照サンプルは分数ピクセル位置で生じ得る。現在の部分と最もよく一致する参照フレームの部分を見つけると、エンコーダは、現在の部分から参照フレームの中の一致する部分までの(すなわち、現在の部分の中心から一致する部分の中心までの)場所の差分として、現在の部分に対する現在の動きベクトルを決定する。
いくつかの例では、ビデオエンコーダ20は、符号化されたビデオビットストリームの中の各部分のための動きベクトルをシグナリングし得る。シグナリングされた動きベクトルは、ビデオデータを復号するために動き補償を実行するために、ビデオデコーダ30によって使用される。しかしながら、元の動きベクトルを直接シグナリングすることはより非効率なコーディングをもたらすことがあり、それは、通常、情報を搬送するのに多数のビットが必要であるからである。
いくつかの例では、ビデオエンコーダ20は、元の動きベクトルを直接シグナリングするのではなく、各区分またはビデオブロックのための(たとえば、HEVCにおける各PUのための)動きベクトルを予測し得る。この動きベクトル予測を実行することにおいて、ビデオエンコーダ20は、現在の部分と同じフレームの中の空間的に近隣のブロックから決定された動きベクトル候補のセット、または参照フレームの中の同じ位置のブロックから決定された動きベクトル候補(たとえば、時間的な動きベクトル予測子(MVP:Motion Vector Predictor))を選択し得る。ビデオエンコーダ20は、動きベクトル予測を実行することができ、必要な場合、シグナリングにおけるビットレートを低減するために、元の動きベクトルをシグナリングするのではなく、予測差分(動きベクトル差分(MVD)とも呼ばれる)をシグナリングすることができる。空間的に近隣のブロックからの動きベクトル候補は空間的MVP候補と呼ばれることがあり、一方、別の参照フレームの中の同じ位置のブロックからの動きベクトル候補は時間的MVP候補と呼ばれることがある。
HEVCおよびH.264/AVCビデオコーディング規格などのブロックベースのビデオコーディングシステムでは、各ブロックに対して、動き情報のセットが、利用可能であることがあり、動き補償プロセスを使用することによってインター予測結果を生成するために使用される。通常、動き情報のセットは、前方予測方向および後方予測方向のための動き情報を含む。ここで、前方予測方向および後方予測方向は、双方向予測モードの2つの予測方向であり、「前方」および「後方」という用語は、必ずしも幾何学的な意味を有するとは限らず、代わりに、これらの用語は、現在のピクチャの参照ピクチャリスト0(RefPicList0)および参照ピクチャリスト1(RefPicList1)に対応する。あるピクチャまたはスライスについて1つの参照ピクチャリストのみが利用可能であるとき、RefPicList0のみが利用可能であり、スライスの各ブロックの動き情報は常に前方である。
各予測方向について、動き情報は、参照インデックスと動きベクトルとを普通は含む。いくつかの場合、簡単にするために、動きベクトルが関連する参照インデックスを有すると仮定されるような方法で、動きベクトル自体が参照されることがある。参照インデックスは、現在の参照ピクチャリスト(RefPicList0またはRefPicList1)中の参照ピクチャを特定するために使用される。動きベクトルは水平成分と垂直成分とを有する。
HEVC規格では、予測単位(PU)のために、それぞれ、マージモード(スキップはマージの特殊な場合と見なされる)および高度動きベクトル予測(AMVP:Advanced Motion Vector Prediction)モードと称される2つのインター予測モードがある。
AMVPモードまたはマージモードのいずれでも、動きベクトル(MV)予測子候補リストは、複数の動きベクトル予測子のために維持される。現在のPUの、動きベクトル、ならびにマージモードにおける参照インデックスは、MV候補リストから1つの候補をとることによって生成される。マージモードでは、マージ候補がマージインデックスによって特定され、現在のブロックならびに関連する動きベクトルの予測のために参照ピクチャが使用され、さらなる動きベクトル差分(MVD)情報はシグナリングされない。AMVPモードでは、リスト0またはリスト1のいずれかからの各々の潜在的な予測方向に対して、参照インデックスは、MV候補リストに対するMVPインデックスとともに明示的にシグナリングされ、MVD情報がさらに、現在のPUのMV情報を精緻化するためにシグナリングされる。
マージモードでは、ビデオエンコーダ20は、予測シンタックスのビットストリームシグナリングを通じて、ビデオデコーダ30に、フレームの現在の部分のための選択された動きベクトル候補から、動きベクトルと、(所与の参照ピクチャリストにおいて動きベクトルが指す参照フレームを特定する)参照インデックスと、(参照ピクチャリスト(List 0またはList 1)を特定する、すなわち参照フレームが時間的に現在コーディングされているフレームに先行するかまたは後続するかに関して特定する)動き予測方向とを複製するように命令する。これは、選択された動きベクトル候補(すなわち、特定の空間的MVP候補または時間的MVP候補)を特定する動きベクトル候補リストへのインデックスをビットストリームにおいてシグナリングすることによって達成される。したがって、マージモードに対して、予測シンタックスは、モード(この場合は「マージ」モード)を特定するフラグと、選択された動きベクトル候補を特定するインデックスとを含み得る。いくつかの事例では、動きベクトル候補は、現在のブロックに関して原因の部分(causal portion)の中にある。すなわち、動きベクトル候補は、ビデオデコーダ30によってすでに復号されている。したがって、ビデオデコーダ30はすでに、原因の部分に対する動きベクトル、参照インデックス、および動き予測方向を受信および/または決定している。したがって、デコーダは、メモリから原因の部分と関連付けられる動きベクトル、参照インデックス、および動き予測方向を簡単に取り出して、これらの値を現在の部分に対する動き情報として複製することができる。マージモードでブロックを再構築するために、デコーダは、現在の部分のための導出された動き情報を使用して予測ブロックを取得し、残差データを予測ブロックに加えて、コーディングされたブロックを再構築する。
AMVPでは、ビデオエンコーダ20は、ビットストリームシグナリングを通じて、ビデオデコーダ30に、単に、候補の部分から動きベクトルを複製し、複製されたベクトルを現在の部分の動きベクトルのための予測子として使用するように命令する。ビデオエンコーダ20はまた、動きベクトル予測子のための参照フレームの参照インデックスおよび現在のブロックの動きベクトル予測子と関連付けられる予測方向とともに、MVDを符号化してビデオデコーダ30にシグナリングする。MVDは、現在のブロックに対する現在の動きベクトルと候補ブロックから導出された動きベクトル予測子との間の差分である。この場合、ビデオエンコーダ20は、動き推定を使用して、コーディングされるべきブロックに対する実際の動きベクトルを決定し、次いで、実際の動きベクトルと動きベクトル予測子との間の差分をMVD値として決定する。このようにして、ビデオデコーダ30は、マージモードにおけるように動きベクトル候補の正確な複製を現在の動きベクトルとして使用するのではなく、動き推定から決定された現在の動きベクトルに「近い」値であり得る動きベクトル候補を使用し、MVDを加算して現在の動きベクトルを復元することができる。ブロックをAMVPモードで再構築するために、ビデオデコーダ30は、対応する残差データを現在の動きベクトルにより指し示されるブロックに加算して、コーディングされたブロックを再構築する。
ほとんどの状況において、MVDは、現在の動きベクトル全体より少ないビットを、シグナリングするために必要とする。このように、AMVPは、動きベクトル全体を送信することをしのぐコーディング効率を維持しながら、現在の動きベクトルをより正確にシグナリングすることを可能にする。対照的に、マージモードは、MVDの仕様を考慮しないので、マージモードは、シグナリング効率の向上(すなわち、より少ないビット)のために、動きベクトルシグナリングの正確さを犠牲にする。AMVPのための予測シンタックスは、モードに対するフラグ(この場合はAMVPフラグ)、候補ブロックに対するインデックス、現在の動きベクトルと候補ブロックからの予測動きベクトルとの間のMVD、参照インデックス、および動き予測方向を含み得る。
本開示の例示的な技法によれば、ビデオエンコーダ20は、様々なサブ整数画素精度および/または整数画素精度の動きベクトルを有する1つまたは複数のPUを使用して、(たとえば、インター予測を使用して)CUをインターモード符号化し得る。たとえば、ビデオエンコーダ20は、符号化されているビデオデータの内容に基づいて、PUのために整数画素精度を有する動きベクトルを使用するか、または分数(たとえば、1/4または1/8)画素精度を有する動きベクトルを使用するかを選択することができる。本開示のいくつかの技法によれば、ビデオエンコーダ20は、符号化されたビデオデータのビットストリームに含めるための、PUの動きベクトルに対するサブ画素精度の指示を生成する必要はないことがある。代わりに、ビデオデコーダ30は、ビデオエンコーダ20によって使用されるのと同じ導出技法を使用して、動きベクトル精度を導出し得る。本開示の他の技法によれば、ビデオエンコーダ20は、符号化されたビデオデータのビットストリームに、ビデオデコーダ30が選択された動きベクトル精度を決定するために使用し得る1つまたは複数のシンタックス要素を含め得る。
以下でより詳細に説明される本開示の技法によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、1整数画素動きベクトル差分(MVD)精度より大きいもの(たとえば、2、3、4、またはそれより大きい画素精度)を含む複数のMVD精度のうちの1つを使用してビデオデータの現在のブロックのためのMVDを決定し、ビデオデータの現在のブロックのためのMVDをコーディングするように構成され得る。
(たとえば、インター予測を実行するときに)サブ整数画素位置に対する値を計算するために、ビデオエンコーダ20は様々な補間フィルタを含み得る。たとえば、双線形補間が、サブ整数画素位置に対する値を計算するために使用され得る。ビデオエンコーダ20は、PUの輝度データに関して動き探索を実行して、PUの輝度データを使用して動きベクトルを計算するように構成され得る。ビデオエンコーダ20は次いで、動きベクトルを再使用して、PUの色差データを符号化し得る。通常、色差データは、対応する輝度データよりも低い分解能、たとえば輝度データの分解能の1/4の分解能を有する。したがって、色差データの動きベクトルは、輝度データの動きベクトルよりも高い精度を有し得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、輝度データのために1/4画素精度の動きベクトル(および計算されたMVD)を使用することがあり、色差データのために1/8画素精度を使用することがある。同様に、ビデオエンコーダ20およびビデオデコーダ30は、輝度データのために1/8画素精度の動きベクトルを使用することがあり、色差データのために1/16画素精度を使用することがある。
予測データおよび残差データを作り出すためのイントラ予測コーディングまたはインター予測コーディングに続いて、また変換係数を作り出すための任意の変換(H.264/AVCまたは離散コサイン変換DCTにおいて使用される4×4または8×8の整数変換など)に続いて、変換係数の量子化が実行され得る。量子化は一般に、係数を表すために使用されるデータの量をできるだけ減らすために変換係数が量子化されるプロセスを指す。量子化プロセスは、係数の一部またはすべてと関連付けられるビット深度を低減し得る。たとえば、nビット値は、量子化の間にmビット値に丸められることがあり、ここで、nはmよりも大きい。
量子化に続いて、量子化されたデータのエントロピーコーディングが、たとえばコンテンツ適応可変長コーディング(CALVC)、コンテキスト適応バイナリ算術コーディング(CABAC)、または別のエントロピーコーディング方法に従って実行され得る。エントロピーコーディングのために構成される処理ユニット、または別の処理ユニットが、量子化された係数のゼロランレングスコーディング、および/または、コーディングブロックパターン(CBP:Coded Block Pattern)値、マクロブロックタイプ、コーディングモード、LCUサイズなどのシンタックス情報の生成などの、他の処理機能を実行し得る。
以下でより詳細に説明されるように、ビデオエンコーダ20は、インター予測モードを使用して符号化されるべきビデオデータのブロックを受信し、ビデオデータのブロックのためのMVDを決定し、MVDを示す1つまたは複数のシンタックス要素を符号化するための現在のMVD精度を3つ以上のMVD精度から決定し、3つ以上のMVD精度がNサンプルMVD精度を含み、NがMVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語によって示されるサンプルの数を示す整数であり、Nが1より大きく、MVDおよびインター予測モードを使用してビデオデータのブロックを符号化し、決定された現在のMVD精度を使用してMVDを示す1つまたは複数のシンタックス要素を符号化するように構成され得る。同様に、ビデオデコーダ30は、インター予測モードを使用して符号化されたビデオデータの符号化されたブロックを受信し、ビデオデータの符号化されたブロックと関連付けられるMVDを示す1つまたは複数のシンタックス要素を受信し、MVDを示す1つまたは複数のシンタックス要素のための現在のMVD精度を3つ以上のMVD精度から決定し、3つ以上のMVD精度がNサンプルMVD精度を含み、NがMVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語によって示されるサンプルの数を示す整数であり、Nが1より大きく、決定された現在のMVD精度を使用してMVDを示す1つまたは複数のシンタックス要素を復号し、復号されたMVDを使用してビデオデータの符号化されたブロックを復号するように構成され得る。
宛先デバイス14のビデオデコーダ30は、本開示のビデオエンコーダ20の技法のいずれかまたはすべてと同様の、かつ全般に対称的な技法を実行するように構成され得る。
図2は、動きベクトルおよび/またはMVDをコーディングおよび/またはシグナリングするための技法を実施することができるビデオエンコーダ20の例を示すブロック図である。ビデオエンコーダ20は、LCU、CU、およびPUを含む、ビデオフレーム内でブロックのイントラ予測およびインター予測を実行し、TUとして符号化され得る残差値を計算し得る。イントラコーディングは、所与のビデオフレーム内のビデオにおいて空間冗長性を低減または除去するために空間予測に依拠する。インターコーディングは、ビデオシーケンスの隣接フレーム内のビデオにおける時間的冗長性を低減または除去するために時間的予測に依存する。イントラモード(I-mode)はいくつかの空間ベースの圧縮モードのいずれかを指すことがあり、単方向予測(P-mode)または双方向予測(B-mode)などのインターモードはいくつかの時間ベースの圧縮モードのいずれかを指すことがある。動き推定ユニット42および動き補償ユニット44はインター予測コーディングを実行し得るが、イントラ予測ユニット46はイントラ予測コーディングを実行し得る。
図2に示されるように、ビデオエンコーダ20は、符号化されるべきビデオフレーム内の現在のビデオブロックを受信する。図2の例では、ビデオエンコーダ20は、ビデオデータメモリ38と、動き補償ユニット44と、動き推定ユニット42と、イントラ予測ユニット46と、復号ピクチャバッファ64と、加算器50と、変換ユニット52と、量子化ユニット54と、エントロピー符号化ユニット56とを含む。ビデオブロック再構築のために、ビデオエンコーダ20はまた、逆量子化ユニット58、逆変換ユニット60、および加算器62を含む。ブロック境界をフィルタリングして再構築されたビデオからブロッキネスアーティファクトを除去するために、デブロッキングフィルタ(図2に示されない)も含まれ得る。所望される場合、デブロッキングフィルタは、通常、加算器62の出力をフィルタリングする。
ビデオデータメモリ38は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ38に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号ピクチャバッファ64は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ38および復号ピクチャバッファ64は、ダイナミックランダムアクセスメモリ(DRAM)(シンクロナスDRAM(SDRAM)を含む)、磁気抵抗RAM(MRAM)、抵抗変化型RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ38および復号ピクチャバッファ64は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ38は、ビデオエンコーダ20の他の構成要素とともにオンチップであることがあり、またはそれらの構成要素に対してオフチップであることがある。
符号化プロセスの間、ビデオエンコーダ20は、コーディングされるべきビデオフレームまたはスライスを受信する。フレームまたはスライスは、複数のビデオブロック(たとえば、LCU)に分割され得る。動き推定ユニット42および動き補償ユニット44は、時間的な圧縮を行うために、1つまたは複数の参照フレームの中の1つまたは複数のブロックに対する相対的な、受信されたビデオブロックのインター予測コーディングを実行する。イントラ予測ユニット46は、空間的な圧縮を行うために、コーディングされるべきブロックと同じフレームまたはスライスの中の1つまたは複数の隣接ブロックに対して相対的な、受信されたビデオブロックのイントラ予測コーディングを実行し得る。
モード選択ユニット40は、たとえば誤差結果に基づいてイントラコーディングモードまたはインターコーディングモードのうちの一方を選択することができ、得られたイントラコーディングされたブロックまたはインターコーディングされたブロックを、残差ブロックデータを生成するために加算器50に提供し、参照フレームとして使用するための符号化されたブロックを再構築するために加算器62に提供する。モード選択ユニット40があるブロックのためにインターモード符号化を選択するとき、分解能選択ユニット48は、そのブロックのための動きベクトルの分解能(たとえば、サブ画素精度または整数画素精度)を選択し得る。たとえば、分解能選択ユニット48は、そのブロックのための動きベクトルおよびMVDのために、1/8画素精度または1/4画素精度を選択し得る。
ある例として、分解能選択ユニット48は、あるブロックを符号化するために1/4画素精度の動きベクトルを使用することと、そのブロックを符号化するために1/8画素精度の動きベクトルを使用することとの間で、誤りの差分(たとえば、再構築されたブロックと元のブロックとの差分)を比較するように構成され得る。動き推定ユニット42は、第1のコーディングパスにおいて1つまたは複数の1/4画素精度の動きベクトルを使用し、第2のコーディングパスにおいて1つまたは複数の1/8画素精度の動きベクトルを使用して、ブロックを符号化するように構成され得る。動き推定ユニット42はさらに、第3の符号化パスにおいてそのブロックに対して、1つまたは複数の1/4画素精度の動きベクトルと1つまたは複数の1/8画素精度の動きベクトルの様々な組合せを使用し得る。分解能選択ユニット48は、ブロックの各符号化パスに対するレート-ひずみ値を計算し、それらのレート-ひずみ値の間の差を計算し得る。
この差が閾値を超えるとき、分解能選択ユニット48は、ブロックを符号化するために1/8画素精度の動きベクトルを選択し得る。分解能選択ユニット48はまた、レート-ひずみ情報を評価し、ビットバジェットを分析し、かつ/または他の要因を分析して、インターモード予測プロセスの間にブロックを符号化するときに、動きベクトルに対して1/8画素精度を使用するか1/4画素精度を使用するかを決定し得る。インターモード符号化されるべきブロックに対して1/8画素精度または1/4画素精度を選択した後で、モード選択ユニット40または動き推定は、動きベクトルに対する選択された精度を示すメッセージ(たとえば、信号)を動き推定ユニット42に送信し得る。
加えて、以下でより詳細に説明される本開示の技法によれば、ビデオエンコーダ20は、複数の動きベクトル差分(MVD)精度のうちの1つを使用してビデオデータの現在のブロックのためのMVDを決定し、ビデオデータの現在のブロックのためのMVDをコーディングするように構成され得る。以下でより詳細に説明されるように、ビデオエンコーダ20は、インター予測モードを使用して符号化されるべきビデオデータのブロックを受信し、ビデオデータのブロックのためのMVDを決定し、MVDを示す1つまたは複数のシンタックス要素を符号化するための現在のMVD精度を3つ以上のMVD精度から決定し、3つ以上のMVD精度がNサンプルMVD精度を含み、NがMVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語によって示されるサンプルの数を示す整数であり、Nが1より大きく、MVDおよびインター予測モードを使用してビデオデータのブロックを符号化し、決定された現在のMVD精度を使用してMVDを示す1つまたは複数のシンタックス要素を符号化するように構成され得る。
動き推定ユニット42および動き補償ユニット44は高度に統合され得るが、概念的な目的のために別々に図示される。動き推定は、ビデオブロックの動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、現在のフレーム(または他のコーディングされた単位)内でコーディングされている現在のブロックに対する、予測参照フレーム(または他のコーディングされた単位)内の予測ブロックの変位を示し得る。予測ブロックは、絶対差分和(SAD)、2乗差分和(SSD)、または他の差分尺度によって決定され得る画素差分に関して、コーディングされるべきブロックとよく一致することが見出されるブロックである。動きベクトルはまた、マクロブロックの区分の変位を示し得る。動き補償は、動き推定によって決定された動きベクトルに基づいて、予測ブロックをフェッチまたは生成することを伴い得る。やはり、動き推定ユニット42および動き補償ユニット44は、いくつかの例では、機能的に統合され得る。
動き推定ユニット42は、インターコーディングされたフレームのビデオブロックのための動きベクトルを、そのビデオブロックを復号ピクチャバッファ64の中の参照フレームのビデオブロックと比較することによって計算する。動き補償ユニット44はまた、参照フレーム、たとえばIフレームまたはPフレームのサブ整数画素を補間し得る。ITU H.264規格は、例として2つのリストであるリスト0およびリスト1を記載し、リスト0は符号化されている現在のフレームより表示順序が早い参照フレームを含み、リスト1は符号化されている現在のフレームより表示順序が遅い参照フレームを含む。したがって、復号ピクチャバッファ64に記憶されているデータは、これらのリストに従って組織化され得る。
いくつかの例では、動き補償ユニット44は、CUの輝度データの動きベクトルが1/8画素精度を有するとき、CUの色差データの1/16画素位置に対する値を補間するように構成され得る。色差データの1/16画素位置に対する値を補間するために、動き補償ユニット44は双線形補間を利用し得る。したがって、加算器50は、参照ブロックの1/16画素位置の双線形補間された値に対する相対的な、CUの色差データの残差を計算し得る。このようにして、コーディング単位の輝度データが輝度データに対して1/8画素精度を有する動きベクトルを使用して符号化されたとき、ビデオエンコーダ20は、双線形補間を使用して、動きベクトルによって特定される参照ブロックの色差データの1/16画素位置の値を計算し、参照ブロックの双線形補間された値に基づいてコーディング単位の色差データを符号化することができる。
動き推定ユニット42は、復号ピクチャバッファ64からの1つまたは複数の参照フレームのブロックを、現在のフレーム、たとえばPフレームまたはBフレームから符号化されるべきブロックと比較する。復号ピクチャバッファ64の中の参照フレームがサブ整数画素に対する値を含むとき、動き推定ユニット42によって計算される動きベクトルは参照フレームのサブ整数画素の場所を指し得る。動き推定ユニット42および/または動き補償ユニット44はまた、サブ整数画素位置に対する値が復号ピクチャバッファ64に記憶されていない場合、復号ピクチャバッファ64に記憶されている参照フレームのサブ整数画素の位置に対する値を計算するように構成され得る。動き推定ユニット42は、計算された動きベクトルをエントロピー符号化ユニット56および動き補償ユニット44に送信する。動きベクトルによって特定される参照フレームブロックは、予測ブロックと呼ばれることがある。
動き推定ユニット42、動き補償ユニット44、モード選択ユニット40、またはビデオエンコーダ20の別のユニットはまた、ブロックを符号化するために使用される動きベクトルのために、1/4画素精度、1/8画素精度、または他の動きベクトル精度(たとえば、整数画素精度または複数サンプル画素精度)の使用をシグナリングし得る。たとえば、動き推定ユニット42は、動きベクトルに対するサブ整数画素精度の指示をエントロピー符号化ユニット56に送信し得る。動き推定ユニット42はまた、動きベクトルに対応するPUのサイズ情報に関するコンテキスト情報をエントロピー符号化ユニット56に提供することができ、ここでサイズ情報は、PUを含むCUの深度、PUのサイズ、および/もしくはPUのタイプのいずれかまたはすべてを含み得る。
動き補償ユニット44は、予測ブロックに基づいて予測データを計算し得る。ビデオエンコーダ20は、動き補償ユニット44からの予測データをコーディングされている元のビデオブロックから減算することによって、残差ビデオブロックを形成する。加算器50は、この減算演算を実行する1つまたは複数の構成要素を表す。変換ユニット52は、離散コサイン変換(DCT)または概念的に同様の変換などの変換を残差ブロックに適用し、残差変換係数値を備えるビデオブロックを生成する。
変換ユニット52は、概念的にDCTと同様であるH.264規格によって定義されるものなどの、他の変換を実行し得る。ウェーブレット変換、整数変換、サブバンド変換、または他のタイプの変換も使用され得る。いずれの場合にも、変換ユニット52は、変換を残差ブロックに適用し、残差変換係数のブロックを生成する。変換は、残差情報を画素値領域から周波数領域などの変換領域に変換し得る。量子化ユニット54は、ビットレートをさらに低減するために残差変換係数を量子化する。量子化プロセスは、係数の一部またはすべてと関連付けられたビット深度を低減することができる。量子化の程度は、量子化パラメータを調整することによって変更され得る。
量子化の後に、エントロピー符号化ユニット56は、量子化された変換係数をエントロピーコーディングする。たとえば、エントロピー符号化ユニット56は、CAVLC、CABAC、または別のエントロピーコーディング技法を実行し得る。エントロピー符号化ユニット56によるエントロピーコーディングの後、符号化されたビデオが、別のデバイスへ送信され、または後の送信もしくは取出しのためにアーカイブされ得る。コンテキスト適応バイナリ算術コーディングの場合、コンテキストは隣接マクロブロックに基づき得る。
いくつかの場合、ビデオエンコーダ20のエントロピー符号化ユニット56または別のユニットは、エントロピーコーディングに加えて、他のコーディング機能を実行するように構成され得る。たとえば、エントロピー符号化ユニット56は、マクロブロックおよび区分のためのCBP値を決定するように構成され得る。また、場合によっては、エントロピー符号化ユニット56は、マクロブロックまたはその区分において係数のランレングスコーディングを実行し得る。具体的には、エントロピー符号化ユニット56は、マクロブロックまたは区分の中の変換係数を走査するためにジグザグ走査または他の走査パターンを適用し、さらなる圧縮のために0のランを符号化し得る。エントロピー符号化ユニット56はまた、符号化されたビデオビットストリームにおける送信のための適切なシンタックス要素とともにヘッダ情報を構築し得る。
本開示の技法によれば、MV/MVD精度が導出されるのではなくシグナリングされる事例では、エントロピー符号化ユニット56は、たとえば、動きベクトルが整数画素精度を有するか、または1/4画素精度もしくは1/8画素精度(または様々な例では、他のサブ画素精度)などのサブ画素精度を有するかを示すために、動きベクトルおよび/またはMVDのMV/MVD精度の指示を符号化するように構成され得る。エントロピー符号化ユニット56は、CABACを使用して指示を符号化し得る。さらに、エントロピー符号化ユニット56は、CABACを実行するためのコンテキスト情報を使用して、動きベクトルに対応するPUのサイズ情報を示す指示を符号化することができ、ここでこのサイズ情報は、PUを含むCUの深度、PUのサイズ、および/もしくはPUのタイプのいずれかまたはすべてを含み得る。
上で論じられたように、ビデオエンコーダ20は、動きベクトルを予測的にシグナリングし得る。ビデオエンコーダ20によって実施され得る予測シグナリング技法の2つの例には、AMVPモードシグナリングおよびマージモードシグナリングがある。AMVPでは、ビデオエンコーダ20およびビデオデコーダ30はともに、すでにコーディングされているブロックから決定された動きベクトルに基づいて、候補リストを組み立てる。ビデオエンコーダ20は次いで、候補リストへのインデックスをシグナリングして動きベクトル予測子(MVP)を特定し、MVDをシグナリングする。ビデオデコーダ30は、MVDによって修正されたようなMVPを使用して、たとえばMVP+MVDに等しい動きベクトルを使用して、ブロックをインター予測する。
マージモードでは、ビデオエンコーダ20およびビデオデコーダ30はともに、すでにコーディングされたブロックに基づいて候補リストを組み立て、ビデオエンコーダ20は、候補リストの中の候補の1つのためのインデックスをシグナリングする。マージモードでは、ビデオデコーダ30は、動きベクトルおよびシグナリングされた候補の参照ピクチャインデックスを使用して、現在のブロックをインター予測する。AMVPモードとマージモードの両方において、ビデオエンコーダ20およびビデオデコーダ30が同じリスト構築技法を利用するので、ブロックをどのように符号化するかを決定するときにビデオエンコーダ20によって使用されるリストは、ブロックをどのように復号するかを決定するときにビデオデコーダ30によって使用されるリストと一致する。
逆量子化ユニット58および逆変換ユニット60は、たとえば、参照ブロックとして後で使用するための、画素領域における残差ブロックを再構築するために、それぞれ、逆量子化および逆変換を適用する。動き補償ユニット44は、復号ピクチャバッファ64のフレームのうちの1つの予測ブロックに残差ブロックを加算することによって、参照ブロックを計算し得る。動き補償ユニット44はまた、動き推定において使用するためのサブ整数画素値を計算するために、1つまたは複数の補間フィルタを再構築された残差ブロックに適用し得る。加算器62は、復号ピクチャバッファ64に記憶するための再構築されたビデオブロックを生成するために、動き補償ユニット44によって生成された動き補償された予測ブロックに再構築された残差ブロックを加算する。再構築されたビデオブロックは、後続のビデオフレームの中のブロックをインターコーディングするために、参照ブロックとして、動き推定ユニット42および動き補償ユニット44によって使用され得る。
図3は、符号化されたビデオシーケンスを復号するビデオデコーダ30の例を示すブロック図である。図3の例では、ビデオデコーダ30は、エントロピー復号ユニット70と、動き補償ユニット72と、イントラ予測ユニット74と、逆量子化ユニット76と、逆変換ユニット78と、復号ピクチャバッファ82と、加算器80とを含む。ビデオデコーダ30は、いくつかの例では、ビデオエンコーダ20(図2)に関して説明された符号化パスとは全般に逆の復号パスを実行し得る。動き補償ユニット72は、エントロピー復号ユニット70から受信された動きベクトルに基づいて、予測データを生成し得る。
ビデオデータメモリ68は、ビデオデコーダ30の構成要素によって復号されるべき、符号化されたビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ68に記憶されるビデオデータは、たとえば、コンピュータ可読媒体16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータの有線ネットワーク通信もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ68は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコーディングピクチャバッファ(CPB)を形成し得る。復号ピクチャバッファ82は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデコーダメモリ68および復号ピクチャバッファ82は、シンクロナスSDRAM、MRAM、RRAM(登録商標)、または他のタイプのメモリデバイスを含む、DRAMなどの様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ68および復号ピクチャバッファ82は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ68は、ビデオデコーダ30の他の構成要素とともにオンチップであってよく、またはそれらの構成要素に対してオフチップであってよい。
エントロピー復号ユニット70は、たとえばビデオデータメモリ68から、符号化されたビットストリームを取り出し得る。符号化されたビットストリームは、エントロピーコーディングされたビデオデータ(たとえば、ビデオデータの符号化されたブロック)を含み得る。エントロピー復号ユニット70は、エントロピーコーディングされたビデオデータを復号することができ、エントロピー復号されたビデオデータから、動き補償ユニット72は、動きベクトル、動きベクトル精度、参照ピクチャリストインデックス、および他の動き情報を含む、動き情報を決定することができる。動き補償ユニット72はたとえば、上で説明されたAMVPモード技法およびマージモード技法を実行することによってそのような情報を決定することができる。
動き補償ユニット72は、ビットストリームにおいて受信される動きベクトルおよび/またはMVDを使用して、復号ピクチャバッファ82の中の参照フレームにおいて予測ブロックを特定し得る。動きベクトルおよび/またはMVDを符号化するために使用される精度は、エントロピー復号ユニット70によって復号される精度インジケータ(たとえば、1つまたは複数のシンタックス要素)によって定義され得る。イントラ予測ユニット74は、ビットストリームにおいて受信されるイントラ予測モードを使用して、空間的に近隣のブロックから予測ブロックを形成し得る。逆量子化ユニット76は、ビットストリームの中で提供されエントロピー復号ユニット70によって復号された量子化されたブロック係数を、逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)する。逆量子化プロセスは、たとえば、H.264復号規格によって定義されたような、従来のプロセスを含み得る。逆量子化プロセスはまた、量子化の程度を決定し、同様に適用されるべき逆量子化の程度を決定するために、各マクロブロックについてビデオエンコーダ20によって計算された量子化パラメータQPYの使用を含み得る。
逆変換ユニット58は、画素領域において残差ブロックを生成するために、逆変換、たとえば、逆DCT、逆整数変換、または概念的に同様の逆変換プロセスを変換係数に適用する。動き補償ユニット72は、動き補償されたブロックを生成し、場合によっては、補間フィルタに基づいて補間を実行する。サブ画素精度の動き推定に使用されるべき補間フィルタの識別子は、シンタックス要素に含まれ得る。
動き補償ユニット72は、参照ブロックのサブ整数画素に対する補間された値を計算するために、ビデオブロックの符号化の間にビデオエンコーダ20によって使用されたような補間フィルタを使用し得る。動き補償ユニット72は、受信されたシンタックス情報に従って、ビデオエンコーダ20によって使用される補間フィルタを決定し、補間フィルタを使用して、予測ブロックを生成し得る。本開示の技法によれば、動き補償ユニット72は、動きベクトルが輝度データに対して1/8画素精度を有するとき、参照ブロックの色差データの1/16画素位置の値を補間し得る。たとえば、動き補償ユニット72は、双線形補間を使用して参照ブロックの1/16画素位置の値を補間し得る。
動き補償ユニット72は、シンタックス情報のいくつかを使用して、符号化されたビデオシーケンスのフレームおよび/またはスライスを符号化するために使用されるLCUおよびCUのサイズ、符号化されたビデオシーケンスのフレームの各マクロブロックがどのように区分されるかを記述する区分情報、各区分がどのように符号化されるかを示すモード、各々のインター符号化されたCUのための1つまたは複数の参照フレーム(および参照フレームリスト)、および符号化されたビデオシーケンスを復号するための他の情報を決定する。
以下でより詳細に説明される本開示の技法によれば、ビデオデコーダ30は、複数のMVD精度のうちの1つを使用してビデオデータの現在のブロックのためのMVDを決定し、ビデオデータの現在のブロックのためのMVDをコーディングするように構成され得る。以下でより詳細に説明されるように、ビデオデコーダ30は、インター予測モードを使用して符号化されたビデオデータの符号化されたブロックを受信し、ビデオデータの符号化されたブロックと関連付けられるMVDを示す1つまたは複数のシンタックス要素を受信し、MVDを示す1つまたは複数のシンタックス要素のための現在のMVD精度を3つ以上のMVD精度から決定し、3つ以上のMVD精度がNサンプルMVD精度を含み、NがMVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語によって示されるサンプルの数を示す整数であり、Nが1より大きく、決定された現在のMVD精度を使用してMVDを示す1つまたは複数のシンタックス要素を復号し、復号されたMVDを使用してビデオデータの符号化されたブロックを復号するように構成され得る。
加算器80は、残差ブロックを動き補償ユニット72またはイントラ予測ユニットによって生成された対応する予測ブロックと加算して、復号されたブロックを形成する。所望される場合、復号されたブロックをフィルタリングしてブロッキネスアーティファクトを除去するために、デブロッキングフィルタも適用され得る。次いで、復号されたビデオブロックは、復号ピクチャバッファ82に記憶され、復号ピクチャバッファ82は、後続の動き補償のための参照ブロックを与え、また、(図1のディスプレイデバイス32などの)ディスプレイデバイス上で提示するための復号されたビデオを生成する。
図4は、あるフル画素位置に対する分数画素位置を示す概念図である。具体的には、図4はフル画素(ペル)100に対する分数画素位置を示す。フル画素100は、ハーフ画素位置102A~102C(ハーフペル102)、1/4画素位置104A~104L(1/4ペル104)、および1/8画素位置106A~106AV(1/8ペル106)に対応する。
図4は、ブロックの1/8画素位置106を、これらの位置が任意選択で含まれ得ることを示すために破線の輪郭を使用して示す。すなわち、動きベクトル(たとえば、同じ精度のMVDから再構築されるような)が1/8画素精度を有する場合、動きベクトルは、フル画素位置100、ハーフ画素位置102、1/4画素位置104、または1/8画素位置106のいずれかを指し得る。しかしながら、動きベクトルが1/4画素精度を有する場合、動きベクトルは、フル画素位置100、ハーフ画素位置102、または1/4画素位置104のいずれかを指し示すことがあるが、1/8画素位置106を指し示さない。他の例では、他の精度、たとえば1/16画素精度、1/32画素精度などが使用され得ることに留意されたい。
フル画素位置100における画素の値は、対応する参照フレームに含まれ得る。すなわち、フル画素位置100における画素の値は一般に、たとえば参照フレームが表示されるときに最終的にレンダリングされ表示される、参照フレームの中の画素の実際の値に相当する。ハーフ画素位置102、1/4画素位置104、および1/8画素位置106の値(分数画素位置と総称される)は、適応補間フィルタまたは固定補間フィルタ、たとえば、様々なWienerフィルタ、双線形フィルタ、または他のフィルタなどの様々な数の「タップ」(係数)のフィルタを使用して補間され得る。一般に、分数画素位置の値は、近隣のフル画素位置または以前に決定された分数画素位置の値に相当する、1つまたは複数の近隣の画素から補間され得る。
本開示のいくつかの例では、以下でより詳細に論じられるように、ビデオエンコーダ20は、たとえば、複数サンプル画素精度、整数画素精度、または、1/8画素精度および1/4画素精度などの分数画素精度から、動きベクトルおよび/またはMVDのための精度を適応的に選択し得る。ビデオエンコーダ20は、各動きベクトル、各CU、各LCU、各スライス、各フレーム、各GOP、またはビデオデータの他のコーディングされた単位のためにこの選択を行い得る。ビデオエンコーダ20が動きベクトルのための1/4画素精度を選択するとき、動きベクトルは、フル画素位置100、ハーフ画素位置102、または1/4画素位置104のいずれかを指し得る。ビデオエンコーダ20が動きベクトルのための1/8画素精度を選択するとき、動きベクトルは、フル画素位置100、ハーフ画素位置102、1/4画素位置104、または1/8画素位置106のいずれかを指し得る。
図5A~図5Cは、対応する色差画素位置および輝度画素位置を示す概念図である。図5A~図5Cはまた、輝度データのために計算される動きベクトルが色差データのためにどのように再使用され得るかを示す。予備的な事項として、図5A~図5Cは画素位置の部分的な行を示す。実際には、フル画素位置は、図4に示されるものなどの関連する分数画素位置の長方形の格子を有し得ることを理解されたい。図5A~図5Cの例は、本開示において説明される概念を示すことが意図され、分数色差画素位置と分数輝度画素位置との間の対応付けの網羅的な列挙であることは意図されない。
図5A~図5Cは、フル輝度画素位置110、ハーフ輝度画素位置116、1/4画素位置112、および1/8輝度画素位置114A、114Bを含む、輝度ブロックの画素位置を示す。図5A~図5Cはまた、フル色差画素位置120、1/4色差画素位置122、1/8色差画素位置124、および1/16色差画素位置126A、126Bを含む、色差ブロックの対応する画素位置を示す。この例では、フル色差画素120はフル輝度画素110に対応する。さらに、この例では、色差ブロックは、輝度ブロックに対して水平かつ垂直に2という係数によってダウンサンプリングされる。したがって、1/4色差画素122はハーフ輝度画素116に対応する。同様に、1/8色差画素124は1/4輝度画素112に対応し、1/16色差画素126Aは1/8輝度画素114Aに対応し、1/16色差画素126Bは1/8輝度画素114Bに対応する。
H.264/AVC、H.265/HEVCなどの進化したビデオコーデック、および場合によってはH.264およびH.265/HEVCに対する後継のコーデックでは、動きベクトルをシグナリングすることのビットコストが増大し得る。このビットコストを下げるために、デコーダ側MV導出(DMVD)が使用され得る。S. KampおよびM. Wien、「Decoder-side motion vector derivation for block-based video coding」、IEEE Transactions on Circuits and Systems for Video Technology、vol.22、pp.1732-1745、2012年12月において、L型のテンプレートマッチングに基づくDMVDが提案された。
図6は、DMVDのための例示的なL型のテンプレートマッチングの図示である。図6の例では、現在のピクチャ134の現在のブロック132は、テンプレートマッチングを使用してインター予測される。テンプレート136は、現在のブロック132のすでに復号された近隣ブロックをカバーする形状を定義する。ビデオデコーダ(たとえば、ビデオデコーダ30)はまず、たとえば、テンプレート136によってカバーされるすでに復号された近隣ブロックに含まれる画素値を、参照ピクチャ140の参照ピクチャの中に位置するブロックをカバーする、同じ位置のテンプレート138によってカバーされるすでに復号された近隣ブロックに含まれる画素値と比較し得る。ビデオデコーダは次いで、そのテンプレートを参照ピクチャの中の他の位置に移動し、テンプレートによってカバーされる画素値を、テンプレート136によってカバーされるすでに復号された近隣ブロックに含まれる画素値と比較し得る。
これらの複数の比較に基づいて、ビデオデコーダは、図6の例に示される最良の一致142などの、最良の一致を決定し得る。ビデオデコーダは次いで、最良の一致と同じ位置のテンプレートとの間の変位を決定し得る。この変位(たとえば、図6の変位144)は、現在のブロック132を予測するために使用される動きベクトルに対応する。
図6に示されるように、ブロックがDMVDモードでコーディングされるとき、ブロックのためのMVは、ビデオデコーダ30に直接シグナリングされるのとは対照的に、ビデオデコーダ30によって探索される。テンプレートマッチングにより最小限のひずみをもたらすMVが、ブロックのための最終的なMVとして選択される。高いコーディング効率を保つために、デコーダ30が現在のブロックを復号するためのMVとしてある動きベクトル候補を選択するには、ある数のテンプレートが必要であることがあり、これは復号の複雑さを高めることがある。
DMVDにおける復号の複雑さを減らすために、Y.-J. Chiu、L. Xu、W. Zhang、H. Jiang、「DECODER-SIDE MOTION ESTIMATION AND WIENER FILTER FOR HEVC」、VCIP workshop 2013、マレーシア、2013年11月17日~20日において、ミラーベースの双方向MV導出方法が提案された。
図7は、例示的なミラーベースの双方向MV導出を示す概念図である。図7に示されるように、ミラーベースの双方向MV導出は、デコーダ側において分数サンプルの精度で、探索中心の周りでの中心対称の動き推定によって適用され得る。探索ウィンドウのサイズ/場所は、事前に定義され、かつビットストリームにおいてシグナリングされ得る。図7において、dMVは、MVペアであるMV0およびMV1を生成するためにPMV0に加算されてPMV1から減算される、オフセットである。探索ウィンドウの内部のdMVのすべての値が確認されることがあり、L0参照ブロックとL1参照ブロックとの間の絶対値差分和(SAD)は、中心対称の動き推定の測定結果として使用されることがある。SADが最小であるMVペアは、ブロックのための最終的なMVとして選択され得る。
適応的な動きベクトルの分解能に関する技法がここで論じられる。サブ画素動き補償は、整数画素動き補償より効率的であることが多い。しかしながら、超高周波数成分を伴うテクスチャコンテンツまたはスクリーンコンテンツなどの一部のビデオコンテンツでは、サブ画素動き補償は、より良い性能を示さず、より悪い性能を示すことすらある。そのような場合、MVおよび/またはMVDが整数画素精度だけでコーディングされるようにすることがより良いことがある。
L. Guo、P. Yin、Y. Zheng、X. Lu、Q. Xu、J. Sole、「Adaptive motion vector resolution with implicit signaling」、ICIP 2010: 2057-2060に記載されたように、適応的なMV分解能が、再構築された残差(たとえば、残差値)に基づいて説明された。再構築された残差ブロックの分散が閾値を超えるとき、ビデオエンコーダ20およびビデオデコーダ30は、1/4画素動きベクトル精度を使用すると決定し得る。それ以外の場合、ビデオエンコーダ20およびビデオデコーダ30は、動きベクトルおよびMVDをコーディングするとき、ハーフ画素動きベクトル精度を使用する。
J. An、X. Li、X. Guo、S. Lei、「Progressive MV Resolution」、JCTVC-F125、トリノ、イタリア、2011年7月に記載されたように、MV分解能はシグナリングされたMV差分の大きさに基づいて適応的に決定される。Y. Zhou、B. Li、J. Xu、G. J. Sullivan、B. Lin、「Motion Vector Resolution Control for Screen Content Coding」、JCTVC-P0277、サンノゼ、米国、2014年1月に記載されたように、いくつかの例では、ビデオエンコーダ20は、スライスレベルで動きベクトル精度情報をシグナリングするように構成され得る。
米国特許出願公開第2015/0195562号に記載されるものなどの他の例では、ビデオエンコーダ20は、以下の技法の1つまたは複数を使用してMV精度情報を条件的にシグナリングするように構成され得る。
上で論じられたように、いくつかの例では、デコーダ側動きベクトル精度導出方法がスクリーンコンテンツに対して提案される。この例では、動きベクトル精度は、ビデオデコーダ30におけるテンプレートマッチングの結果に依存し得る。整数画素位置のテンプレートマッチング結果およびその近隣のサブ画素位置のテンプレートマッチング結果がかなり異なる(たとえば、何らかの閾値の距離より大きい)とき、関連する領域はスクリーンコンテンツとして見なされることがあり、ビデオデコーダ30は整数画素精度でMVを復号することがある。それ以外の場合、ビデオデコーダ30は、サブ画素動きベクトル精度を使用するように構成され得る。「かなり異なる」を定義するために、1つまたは複数の固定されたまたは適応的な閾値が使用され得る。
ビデオデコーダ30は、たとえば、テンプレートマッチングに基づいて動きベクトル精度を決定することによって、ビデオデータを復号し得る。そのような例では、ビデオデコーダ30は、コーディングされている現在のブロックに対して、すでにコーディングされた近隣ブロックの整数画素位置を特定し、整数画素位置の場所に基づいて、あるテンプレートを適用して複数の整数画素位置を決定し得る。ビデオデコーダ30はまた、そのテンプレートを複数のサブ画素位置に適用して、複数のサブ画素位置を決定し得る。テンプレートは、たとえばある形状を定義することがあり、ビデオデコーダ30は、テンプレートをビデオデータに適用して、現在のブロックに対するその形状の相対的な位置に基づいて複数の整数画素位置を位置特定することによって、複数の整数画素位置を決定し得る。同様に、ビデオデコーダ30は、テンプレートをビデオデータに適用して、現在のブロックに対するその形状の相対的な位置に基づいて複数のサブ画素位置を位置特定することによって、複数のサブ画素位置を決定し得る。
ビデオデコーダ30は、複数の整数画素位置に対する1つまたは複数の画素値を複数のサブ画素位置に対する1つまたは複数の画素値と比較し、その比較に基づいて、動きベクトルの動きベクトル精度を決定し得る。ビデオデコーダ30は、動きベクトルを使用して現在のブロックを復号し得る。ビデオデコーダ30は、たとえば、マージモード、AMVPモード、または何らかの他のそのようなモードを使用して動きベクトルを決定し得る。
ビデオデコーダ30は、複数の整数画素位置に対する1つまたは複数の画素値を複数のサブ画素位置に対する1つまたは複数の画素値と比較することによって動きベクトルの動きベクトル精度を決定して、複数の整数画素位置に対する1つまたは複数の画素値と複数のサブ画素位置に対する1つまたは複数の画素値との間の画素値の差分の量に相当する差分値を決定し得る。差分値が閾値より大きいことに応答して、ビデオデコーダ30は、動きベクトル精度が整数画素精度より大きいと決定し得る。差分値が閾値より小さいことに応答して、ビデオデコーダ30は、サブ画素精度であるものとして動きベクトル精度を決定し得る。閾値は、固定された値、適応的な値、または何らかの他のタイプの値であり得る。複数の整数画素位置に対する1つまたは複数の画素値を複数のサブ画素位置に対する1つまたは複数の画素値と比較するために、ビデオデコーダ30は、たとえば、複数の整数画素位置に対する1つまたは複数の画素値と複数のサブ画素位置に対する1つまたは複数の画素値との間の絶対的な差分の合計を決定し得る。
本開示の他の技法によれば、動きベクトル精度は、空間的に近隣のブロック、時間的に近隣のブロック、または両方の性質(シャープネス、グラディエント、または変換がスキップされるかどうか)に依存し得る。動きベクトル精度情報は、ビデオデコーダ30によって導出され得る。代わりに、または加えて、動きベクトル精度は、空間的に近隣のブロック、時間的に近隣のブロック、または両方の動きベクトル精度に依存し得る。
ビデオデコーダ30は、たとえば、近隣ブロックの性質に基づいて動きベクトル精度を決定し得る。近隣ブロックは、たとえば、少なくとも1つの空間的に近隣のブロックおよび/または少なくとも1つの時間的に近隣のブロックを含み得る。コーディングされている現在のブロックに対して、ビデオデコーダ30は、1つまたは複数の近隣ブロックを位置特定し、1つまたは複数の近隣ブロックの性質を決定し得る。この性質は、たとえば、1つまたは複数の近隣ブロックのシャープネス、1つまたは複数の近隣ブロックのグラディエント、1つまたは複数の近隣ブロックがスキップモードでコーディングされたかどうか、および/または1つまたは複数の近隣ブロックの動きベクトル精度のうちの1つまたは複数であり得る。1つまたは複数の近隣ブロックの性質に基づいて、ビデオデコーダ30は、動きベクトルの動きベクトル精度を決定し、動きベクトルを使用して現在のブロックを復号し得る。ビデオデコーダ30は、たとえば、どの性質を決定すべきかをシグナリングすることなく(たとえば、状況に基づいて)決定することがあり、または常に固定された性質を決定することがあり、またはどの性質を決定すべきかの指示を受信することがある。
本開示の別の例示的な技法では、ビデオエンコーダ20は、どのデコーダ側動きベクトル精度方法が使用されるかを指定するインジケータをビットストリーム(たとえば、1つまたは複数のシンタックス要素)においてシグナリングし得る。たとえば、ビデオエンコーダ20は、ビットストリームにおいてそのインジケータを直接シグナリングすることができ、かつ/または、ビデオデコーダ30は、スライスタイプおよび時間レベルなどのビットストリームにおいてコーディングされる他の情報からインジケータの値を導出することができる。
ビデオデコーダ30は、たとえば、動きベクトル精度シグナリングタイプの指示を符号化されたビデオビットストリームにおいて受信し、動きベクトル精度シグナリングタイプに基づいて、ビデオデータのブロックのための動きベクトル精度を決定し得る。ビデオデコーダ30は、決定された動きベクトル精度の動きベクトルを使用して、ビデオデータのブロックの参照ブロックを位置特定し得る。動きベクトル精度シグナリングタイプは、以下でより詳細に説明されるように、たとえば、(1)上で説明されたようなテンプレートマッチングタイプ、(2)上で説明されたような隣接ブロック性質ベースのタイプ、または(3)直接シグナリングタイプのうちの1つであり得る。
ビデオデコーダ30は、たとえば、スライスヘッダ、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、または何らかの他のレベルで、動きベクトル精度の指示を受信し得る。一例では、ビデオデコーダ30は、コーディング単位または予測単位の1つまたは複数に対する動きベクトル予測の指示を受信し得る。この指示は、たとえばスライスタイプであり得る。言い換えると、ビデオデコーダ30は、特定のスライスのスライスタイプを決定することができ、そのスライスタイプに基づいて、そのスライスのブロックを復号するために使用する動きベクトル精度を決定することができる。この指示は、たとえばスライスの時間レベルであり得る。言い換えると、ビデオデコーダ30は、スライスの時間レベルを決定することができ、スライスの時間レベルに基づいて、そのスライスのブロックを復号するために使用する動きベクトル精度を決定することができる。
別の例では、ビデオエンコーダ20は、最大コーディング単位LCUレベル、CUレベル、またはPUレベルなどにおいて、動きベクトル精度情報をビットストリームにおいてシグナリングするように構成され得る。言い換えると、ビデオエンコーダ20は、符号化されたビデオデータのビットストリームに含めるために1つまたは複数のシンタックス要素を生成することができ、ビデオデコーダ30は、それらのシンタックス要素を構文解析して、ビデオデータの特定のブロックに対する動きベクトル精度を決定することができる。CUが整数精度MVを有することが示されるとき、このCUの内部のすべてのPUが整数動きベクトル精度を有する。
ある例では、マージ/スキップモードにおいて、ビデオデコーダ30は、動き補償を実行するときにだけ動きベクトルを整数精度に丸めることがある。丸められないMVは、より後のブロックのMV予測のために取っておかれることがある。たとえば、ビデオデコーダ30は、第1のブロックのコーディングモードがマージモードまたはスキップモードであると決定し、第1のブロックの動きベクトル精度が整数画素精度であると決定することがある。ビデオデコーダ30は、少なくとも1つの分数精度動きベクトル候補を含む、第1のブロックのためのマージ候補リストを構築することができる。ビデオデコーダ30は、第1のブロックを復号するための分数精度動きベクトル候補を選択し、分数精度動きベクトル候補を丸めて整数画素精度動きベクトルを決定することができる。ビデオデコーダ30は、整数画素精度動きベクトルを使用して、第1のブロックの参照ブロックを位置特定することができる。
第2のブロック(たとえば、第1のブロックの情報に基づいてコーディングされるブロック)に対して、ビデオデコーダ30は、整数精度動きベクトル候補を第2のブロックのための候補リスト(たとえば、マージ候補リストまたはAMVP候補リスト)に追加し得る。しかしながら、他の例では、ビデオデコーダ30は、分数精度動きベクトル候補を第2のブロックのための候補リストに追加し得る。
非マージ/スキップインターモードでは、MV予測子は整数精度へと丸められることがあり、MVDは、丸められたMVがより後のブロックのMV予測のために取っておかれ得るように、整数精度でシグナリングされることがある。代わりに、または加えて、ビデオエンコーダ20およびビデオデコーダ30は、丸めの前のMVをより後のブロックのMV予測に取っておくように構成され得る。ある例では、この場合、丸めは動き補償だけのために実行され得る。代わりに、または加えて、丸められたMVは、動き補償において使用されることがあり、より後のブロックのMV予測のために取っておかれることがある。
たとえば、ビデオデコーダ30は、第1のブロックのコーディングモードがマージモード以外であると決定し、第1のブロックの動きベクトル精度が整数画素精度であると決定することがある。ビデオデコーダ30は、第1のブロックに対する分数精度MVPを決定し、分数精度MVPを丸めて第1のブロックに対する整数画素精度MVPを決定することがある。ビデオデコーダ30は、整数画素精度である第1のブロックに対するMVDを決定することができる。ビデオデコーダ30は、整数画素精度MVPおよび分数精度MVDに基づいて、整数画素精度動きベクトルを決定することができる。ビデオデコーダ30は、整数画素精度動きベクトルを使用して、第1のブロックの参照ブロックを位置特定することができる。
ビデオデコーダ30は、たとえば、第1のブロックに対するAMVP候補リストを構築することによって、第1のブロックの分数精度MVPを決定することができる。AMVP候補リストは、分数精度動きベクトル候補を含み得る。ビデオデコーダ30は、分数精度動きベクトル候補を、第1のブロックに対する分数精度MVPとして選択し得る。ビデオデコーダ30は、第1のブロックの情報を使用して予測されることになる第2のブロックに対する候補リストに、分数精度動きベクトル候補を追加し得る。
代わりに、または加えて、ある例では、MVD精度情報はシグナリングされることがあり、いくつかの例ではサブ画素精度MVが常に使用されることがある。MVD精度は、LCUレベルで、CUレベルで、またはPUレベルでシグナリングされ得る。一例では、PU(またはCU)が整数精度MVDを有することが示されるとき、PU(またはこのCUの内部のすべてのPU)が整数MVD精度を有し得る。AMVPコーディングされるPUに対して、PUのMVDは整数画素精度を有し得るが、予測されるMVおよびPUのMVはサブ画素精度を有し得る。したがって、整数精度MVDをサブ画素精度MVPに加算すると、サブ画素動きベクトルが得られる。
たとえば、ビデオデコーダ30は、第1のブロックのMVD精度が整数画素精度であると決定し得る。ビデオデコーダ30は、少なくとも1つの分数精度動きベクトル候補を含む、第1のブロックに対するMVPの候補リスト(たとえば、およびAMVP候補リスト)を構築し得る。ビデオデコーダ30は、分数精度動きベクトル候補を候補リストから選択し、分数精度動きベクトル候補および整数画素精度MVDに基づいて分数画素精度動きベクトルを決定し得る。ビデオデコーダ30は、分数画素精度動きベクトルを使用して、第1のブロックの参照ブロックを位置特定することができる。
別の例では、動きベクトル精度フラグは部分的に、LCUまたはCUへ適用され得る。たとえば、CU整数精度フラグは、マージおよびスキップなどの事前に定義されたコーディングモードを用いて、または非2N×2N区分などの事前に定義された区分を用いて、または変換スキップもしくは残差なしなどの特別なコーディングツールを用いてコーディングされる、CUのPUに適用されない。
一例では、ビデオデコーダ30は、ビデオデータに対するデフォルトの動きベクトル精度を決定し、ビデオデータのPUが特別なモードでコーディングされることに応答して、デフォルトの動きベクトル精度の動きベクトルを使用してPUに対する参照ブロックを位置特定し得る。特別なモードは、たとえば、スキップモード、2N×2Nマージモード、マージモード、変換スキップモード、または非対称区分モードのうちの1つまたは複数であり得る。ビデオデータの第2のPUが特別なモード以外のモードを使用してコーディングされることに応答して、ビデオデコーダ30は、ビデオデータの第2のPUに対して、シグナリングされた動きベクトル精度を決定し、シグナリングされた動きベクトル精度の動きベクトルを使用して第2のPUに対する参照ブロックを位置特定し得る。ビデオデコーダ30は、ビデオデータのCUに対して、デフォルトの動きベクトル精度とは異なるシグナリングされた動きベクトル精度を決定し得る。CUは、たとえばPUおよび/または第2のPUを含み得る。一例では、シグナリングされた動きベクトル精度は整数画素精度であり得るが、デフォルトの動きベクトル精度は分数動きベクトル精度である。他の例では、デフォルトの動きベクトル精度は分数動きベクトル精度であり得る。
一例では、ビデオエンコーダ20は、0ではないMVDを有するPUまたはCUだけに対して、MV/MVD精度情報を符号化してシグナリングするように構成され得る。MV/MVD精度情報がシグナリングされないとき、ビデオデコーダ30は、PUまたはCUに対してサブ画素MV精度を使用するように構成され得る。ビデオエンコーダ20は、PUまたはCUのMVDを符号化してシグナリングした後で、MV/MVD精度情報をシグナリングするように構成され得る。いくつかの例では、0に等しいMVDは、MVDの垂直成分とMVDの水平成分の両方が0に等しいことを示し得る。
一例では、ビデオデータの現在のブロックに対して、ビデオデコーダ30は、MVD値を示す1つまたは複数のシンタックス要素を受信し得る。MVD値が0に等しいことに応答して、ビデオデコーダ30は、現在のブロックに対する動きベクトルがサブ画素動きベクトル精度を有すると決定するように構成され得る。0に等しいMVD値は、MVD値のx成分とMVD値のy成分の両方が0に等しいことを示し得る。
ビデオデータの第2の現在のブロックに対して、ビデオデコーダ30は、第2のMVD値を示す1つまたは複数のシンタックス要素を受信し、第2のMVD値が0ではない値であることに応答して、第2の現在のブロックの第2の動きベクトルに対する動きベクトル精度の指示を受信し得る。ビデオデコーダ30は、参照ピクチャにおいて、第2の動きベクトルを使用して第2の現在のブロックのための参照ブロックを位置特定し得る。第2の現在のブロックに対して、ビデオデコーダ30は、第2のMVD値を受信した後で、動きベクトル精度の指示を受信し得る。
MV/MVD精度情報がPUレベルでシグナリングされるとき、ビデオエンコーダ20は、(1)PUがマージ/スキップモードでコーディングされること、(2)PUがAMVPモードでコーディングされ、PUの各予測方向におけるMVDが0に等しいこと、または(3)代わりにもしくは加えて、HEVCでは許容されない、1つのCUがイントラコーディングされたPUおよびインターコーディングされたPUを一緒に含み得ることという条件の1つまたは複数(たとえば、いずれか)が真である場合、MV/MVD精度情報をシグナリングしないように構成され得る。PUがイントラコーディングされるとき、PUレベルにおけるMV/MVD精度情報のシグナリングがスキップされる。
ビデオデコーダ30は、たとえば、ビデオデータの第1のブロック(たとえば、第1のPU)に対して、第1の動きベクトル精度情報を示す1つまたは複数のシンタックス要素を受信し得る。ビデオデータの第2のブロックがある条件を満たすことに応答して、ビデオデコーダ30は、デフォルトの動きベクトル精度に対応するものとして第2の動きベクトル情報を決定し得る。一例では、この条件は、第2のブロックがマージモードまたはスキップモードを使用してコーディングされることであり得る。別の例では、この条件は、第2のブロックがAMVPモードを使用してコーディングされること、および、第2のブロックの各予測方向に対するMVDが0に等しいことであり得る。デフォルトの精度は、たとえば、いくつかの例では分数精度であり、または他の例では整数精度であり得る。第1および第2の動きベクトル精度情報は、たとえば、動きベクトル精度またはMVD精度の一方または両方であり得る。
MV/MVD精度情報がCUレベルでシグナリングされるとき、MV/MVD精度情報は、(1)PUがイントラコーディングされること、(2)PUがマージ/スキップモードでコーディングされること、または(3)PUがAMVPモードでコーディングされ、PUの各予測方向におけるMVDが0に等しいことという、条件のうちの1つ(および場合によっては1つまたは複数)がCU内のすべてのPUに対して真である場合、シグナリングされないことがある。代わりに、または加えて、動きベクトル精度情報がシグナリングされないとき、整数動きベクトル精度などのデフォルトの動きベクトル精度が、PUまたはCUのために使用され得る。
ビデオデコーダ30は、たとえば、ビデオデータの第1のCUに対して、第1の動きベクトル精度情報を受信し、ビデオデータの第2のCUがある条件を満たすことに応答して、デフォルトの精度に対応するものとして第2の動きベクトル情報を決定し得る。条件は、たとえば、CU内のすべてのPUがイントラコーディングされること、CU内のすべてのPUがマージモードまたはスキップモードを使用してコーディングされること、CU内のすべてのPUが、AMVPおよびすべてのPUの各方向に対して0に等しいMVDを使用してコーディングされることであり得る。デフォルトの精度は、たとえば分数精度であることがあり、または精度なしであることがある。たとえば、ブロックがイントラ予測される場合、ブロックは、関連する動きベクトルを有しないので、関連する動きベクトル精度を有しない。第1および第2の動きベクトル精度情報は、たとえば、動きベクトル精度またはMVD精度の一方または両方を含み得る。
現在のAMVPコーディングされるPUが整数画素動きベクトル精度でシグナリング/導出されるとき、空間的に近隣のブロック、時間的に近隣のブロック、または両方からの1つまたは複数の(およびいくつかの例ではすべての)MV候補は、AMVPリストの生成プロセスにおける剪定の前に整数画素精度へ丸められ得る。整数画素MVが現在のマージコーディングされたCU/PU、スキップコーディングされたCU/PU、または両方のために使用されるものとしてシグナリング/導出されるとき、空間的に近隣のブロック、時間的に近隣のブロック、または両方からの1つまたは複数の(およびいくつかの例ではすべての)MV候補は、マージリストの生成プロセスにおける剪定の前に整数画素精度へ丸められ得る。
たとえば、ビデオデコーダ30は、ブロックに対する候補リスト(たとえば、マージ候補リストまたはAMVP候補リスト)に含めるための、1つまたは複数の動きベクトル候補を特定し得る。1つまたは複数の動きベクトル候補は、たとえば、1つまたは複数の空間的に近隣の候補および/または1つまたは複数の時間的に近隣の候補を含み得る。1つまたは複数の動きベクトル候補は、少なくとも1つの分数精度動きベクトル候補を含み得る。ブロックに対する動きベクトル精度が整数画素精度であることに応答して、ビデオデコーダ30は、1つまたは複数の動きベクトル候補を丸めて、1つまたは複数の整数精度動きベクトル候補を決定し得る。ビデオデコーダ30は、1つまたは複数の整数精度動きベクトル候補に対して剪定動作を実行し得る。
ある例では、動きベクトル精度フラグは、他のシンタックス要素のCABACコンテキストとして使用され得る(または条件的に使用され得る)。すなわち、動きベクトル精度フラグに応じた様々なコンテキストモデルが、いくつかのシンタックス要素をコーディングするために使用され得る。一例では、PUなどのブロックに対するAMVP候補インデックスをコーディングするとき、PUまたは関連するCUまたは空間的に近隣のブロックまたは時間的に近隣のブロックの動きベクトル精度フラグは、CABACコーディングコンテキストとして使用される。代わりに、または加えて、いくつかの例では、AMVP候補インデックスが0に等しいことの初期化された確率は、動きベクトル精度フラグが整数画素動きベクトル精度を示すときに、1に近く設定され得る。代わりに、または加えて、Bスライスだけにおいて、またはスライスがある時間レベルにあるときだけ、または量子化パラメータが事前に定義された閾値より大きいときなどの、いくつかの場合において、動きベクトル精度フラグが、AMVP候補インデックスなどの他のシンタックス要素のためのCABACコンテキストとして使用され得る。
これらの例の1つまたは複数は組み合わされ得る。たとえば、実際には、例の任意の部分の任意の組合せが、新しい例として使用され得る。加えて、上の例の副次的な例が以下で論じられる。
いくつかの例は、スクリーンコンテンツのためのデコーダ側の動きベクトル精度の導出に関する。一例では、再構築されたサンプル上でのL型または他の型のテンプレートマッチングが使用され得る。動きベクトル精度は、整数画素位置のSADなどのテンプレートマッチング結果と、その近隣のサブ画素位置のマッチング結果との差に基づき得る。たとえば、整数画素位置のマッチング結果がはるかに低いとき、整数画素精度が適用される。それ以外の場合、サブ画素精度が適用される。「はるかに低い」を定義するために、閾値が使用され得る。実際に、固定された閾値、適応的な閾値、または両方が使用され得る。適応的な閾値について、適応的な閾値は、ビットストリームにおいてシグナリングされ、ブロックタイプ、またはQPなどの、ビットストリームにおいてシグナリングされる他の情報に基づいて導出され得る。加えて、「はるかに高い」場合に対する閾値も定義され得る。その結果、整数位置のマッチング結果から近隣のサブ画素位置のマッチング結果を引いたものが「はるかに高い」閾値より高いとき、1/4画素精度が使用され得る。マッチングの差が「はるかに低い」の閾値と「はるかに高い」の閾値の間にあるとき、ハーフ画素精度が使用され得る。代わりに、または加えて、ミラーベースの双方向テンプレートマッチングなどの他のテンプレートマッチング方法が、上の例において代わりに使用され得る。
別の例では、動きベクトル精度情報は、グラディエント、シャープネス、または変換がブロックに対してスキップされるかどうかなどの、空間的または時間的に近隣のブロックの性質に基づいて、デコーダ側で導出され得る。閾値の情報は、ビットストリームにおいてシグナリングされ、ビットストリームから導出され、または両方であり得る。
いくつかの例はインジケータのシグナリングに関する。様々なコンテンツに対して適応的に適合するように、デコーダ側動きベクトル精度導出(DMPD)の異なる方法の組合せが使用され得る。どの方法が使用されているかを示すために、インジケータがビットストリームにおいてシグナリングされ得る。一例では、インジケータは、どのDMPD方法が使用されるかをデコーダに明示的に伝えるために、スライスレベル以上でシグナリングされ得る。別の例では、いくつかのDMPD方法の使用がビットストリームにおいてシグナリングされ、一方で、他のDMPD方法の使用が、スライスのスライスタイプおよび時間レベルなどの、ビットストリームの中の他の情報に基づいて導出される。
いくつかの例は、シグナリングされる適応的な動きベクトル精度に関する。そのような例では、動きベクトル精度は、LCUレベル、CUレベル、またはPUレベルなどのビットストリームにおいてシグナリングされ得る。整数精度、ハーフ画素精度、1/4画素精度、または他の精度などの動きベクトル精度を示すために、フラグ/値が使用され得る。動きベクトル精度が1つのブロックまたは1つの領域/スライスのためにシグナリングされるとき、ブロック/領域/スライス内のすべてのより小さいブロックが、同じ動きベクトル精度を共有し得る。その上、MVD情報はまた、シグナリングされる精度においてシグナリングされ得る。動き補償の前に、MV(MV予測子+MVD)は、シグナリングされた精度に丸められ得る。この丸めは、正の無限大、負の無限大、0、または無限大に向かうものであり得る(負の値は負の無限大に丸められ、一方で正の値は正の無限大に丸められる)。代わりに、または加えて、MV予測子は、上で言及されたようにまず丸められ、次いでブロックのためのMVを形成し得る。動き補償の後で、ブロックのMVはより後のブロックのMV予測のために取っておかれる。MVを取っておくとき、丸められるMVは、たとえば、後で復号されるブロックのためのマージ候補またはAMVP候補として後で使用されるために取っておかれることがある。代わりに、または加えて、丸められないMVが、丸められた動きベクトルの代わりに取っておかれることがあり、このことは場合によっては、モーションフィールドをより正確に保つことがある。
別の例では、動きベクトル精度情報は、スキップモード、2N×2Nマージモード、または両方に対してシグナリングされない。そのような例では、動きベクトル精度情報はまた、マージされたPUに対してシグナリングされないことがある。代わりに、または加えて、マージモードおよびスキップモードなどの空間コーディングモードにおいて、または非対称区分などの空間的な区分を用いて、または空間的な変換深度もしくは変換スキップを用いてコーディングされるPUは、整数精度MVがPUのCUレベルにおいてシグナリングされるときであっても、1/4ペルなどのデフォルトの動きベクトル精度を保ち得る。代わりに、または加えて、時間レベル、QP、CU、深度などの他のコーディングされる情報も、空間コーディングモードまたは空間コーディングツールとして考えられ得る。
CABACを用いて動きベクトル精度をエントロピーコーディングするとき、空間的に近隣のブロック/CUの中の動きベクトル精度情報以外のコンテキストが、CU深度、PU区分、ブロックサイズ、時間レベルなどのラインバッファを保つために使用され得る。
ブロック(たとえば、PU)のための例示的なMVDシグナリングの疑似コード、シンタックス、およびセマンティクスが以下で示される。
abs_mvd_greater0_flag[0]およびabs_mvd_greater0_flag[1]は、1つのビンであり同じコンテキストを共有する。
abs_mvd_greater1_flag[0]およびabs_mvd_greater1_flag[1]は、1つのビンであり同じコンテキストを共有する。
abs_mvd_minus2[0]およびabs_mvd_minus2[1]は、パラメータが1に等しい指数ゴロム符号である。
本開示の一例では、MVD(たとえば、MVDの水平成分および垂直成分を表す符号語)を示すために使用される1つまたは複数のシンタックス要素は、abs_mvd_greater0_flag[x]、abs_mvd_greater1_flag[x]、abs_mvd_minus2[x]、およびmvd_sign_flag[x]を含むことがあり、ここで[x]はMVDの水平成分または垂直成分のいずれかを指定する(たとえば、水平成分に対して[0]および垂直成分に対して[1])。シンタックス要素abs_mvd_greater0_flag[x]の値は、特定の水平成分または垂直成分に対するMVDの絶対値が0より大きいかどうかを示す。シンタックス要素abs_mvd_greater1_flag[x]の値は、特定の水平成分または垂直成分に対するMVDの絶対値が1より大きいかどうかを示す。シンタックス要素abs_mvd_greater1_flag[x]は、対応するabs_mvd_greater0_flag[x]の値が、MVDの成分の絶対値が0より大きいことを示す場合にのみコーディングされることに留意されたい。abs_mvd_minus2[x]の値は、特定の水平成分または垂直成分に対するMVDの絶対値を示す。シンタックス要素abs_mvd_minus2[x]は、対応するabs_mvd_greater1_flag[x]の値が、MVDの成分の絶対値が1より大きいことを示す場合にのみコーディングされることに留意されたい。シンタックス要素mvd_sign_flag[x]の値は、MVDの極性(たとえば、正または負)または各成分を示す。上記はMVDがどのようにコーディングされ得るかの一例である。当然、シンタックス要素の他のグループがMVDをコーディングするために使用され得る。
既存の適応MV(MVD)精度技法は、整数ペルレベルと分数ペルレベルとの間でMV/MVD精度を切り替えることを可能にするだけである。分数ペルレベルは、1/4画素(または1/4輝度サンプル)精度および/または1/8画素(または1/8輝度サンプル精度)を含み得る。1/4画素精度では、MVまたはMVDのための連続する符号語の値の間の差は、画素(または輝度サンプル)間の距離の1/4に等しい。同様に、1/8画素精度では、MVまたはMVDのための連続する符号語の値の間の差は、画素(または輝度サンプル)間の距離の1/8に等しい。整数画素精度では、MVまたはMVDのための連続する符号語の値の間の差は、フル画素(または輝度サンプル)の距離に等しい。
しかしながら、動きの大きい高分解能のシーケンス(たとえば、フレーム間での大きな変化)の場合、整数ペル精度でのMVおよび/またはMVDのシグナリングは、予測効率とMV/MVD情報のビットオーバーヘッドとの間で最適なトレードオフを達成するのに十分ではないことがある。すなわち、MVおよびMVDは、高分解能のシーケンスでは、より低分解能のシーケンスと比較してより大きい値を有することがある。MVおよびMVDの大きい値により、MVおよび/またはMVDを示す1つまたは複数のシンタックス要素をシグナリングするために符号語が多数のビットを必要とすることがある。
上で説明された潜在的な問題に対処するために、本開示は以下の技法を説明する。ビデオエンコーダ20および/またはビデオデコーダ30は、以下で説明される技法の各々を実行するように構成され得る。以下の技法は、個別に、または任意の組合せで一緒に実行され得る。
本開示の第1の例では、複数輝度サンプル(2以上の整数輝度サンプル)の単位で、ビデオエンコーダ20はMVDをシグナリングするように構成されることがあり、ビデオデコーダ30はMVDを受信するように構成されることがある。すなわち、MVおよび/またはMVDの精度を分数ペル精度または整数ペル精度に限定するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、距離が複数の輝度サンプル(たとえば、輝度サンプルまたは色差サンプル)である精度を使用して、MVおよびMVDを表すように構成され得る。一例では、複数サンプルMV/MVD精度はNサンプルMV/MVD精度と呼ばれることがあり、ここでNはMV/MVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語(たとえば、MV/MVDの水平成分および垂直成分に対する)によって示されるサンプルの数を示す整数である。
本開示の例によれば、ビデオエンコーダ20およびビデオデコーダ30は、3つ以上のMV/MVD精度の中からあるMV/MVD精度を決定するように構成され得る。この例では、3つ以上のMV/MVD精度は、1つまたは複数のNサンプルMVD精度を含む。一例では、MV/MVDシグナリングのために、既存の1/4サンプルおよび整数サンプルのMV/MVD精度に加えて、NサンプルMVD精度(たとえば、輝度サンプルおよび/または色差サンプル)がブロック/CU/PUに適用され得る。Nの値は事前に定義され、2、3、または4であり得るが、それらに限定されない。一例では、Nの値は、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、またはスライスヘッダ、または任意の他のレベルのパラメータセットなどの、ビットストリームにおいてシグナリングされ得る。
本開示の一例では、ビデオエンコーダ20は、インター予測モード(たとえば、AMVPモード)を使用して符号化されるべきビデオデータのブロックを受信するように構成され得る。動きベクトルを決定し、動きベクトル精度を選択した後で、上で論じられたように、ビデオエンコーダ20はさらに、ビデオデータのブロックのためのMVDを決定するように構成され得る。本開示の技法によれば、ビデオエンコーダ20は、3つ以上のMVD精度から、MVDを示す1つまたは複数のシンタックス要素を符号化するための、現在のMVD精度を決定するように構成され得る。3つ以上のMVD精度は、NサンプルMVD精度を含み、ここでNは、MVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語によって示されるサンプルの数を示す整数であり、Nは1より大きい。ビデオエンコーダ20は次いで、MVDおよびインター予測モードを使用してビデオデータのブロックを符号化し、ならびに、決定された現在のMVD精度を使用してMVDを示す1つまたは複数のシンタックス要素を符号化し得る。
逆の方式で、ビデオデコーダ30は、インター予測モード(たとえば、AMVPモード)を使用して符号化されたビデオデータの符号化されたブロックを受信し、ビデオデータの符号化されたブロックと関連付けられるMVDを示す1つまたは複数のシンタックス要素を受信するように構成され得る。本開示の技法によれば、ビデオデコーダ30は、3つ以上のMVD精度から、MVDを示す1つまたは複数のシンタックス要素のための、現在のMVD精度を決定するように構成され得る。3つ以上のMVD精度は、NサンプルMVD精度を含むことがあり、ここでNは、MVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語によって示されるサンプルの数を示す整数であり、Nは1より大きい。ビデオデコーダ30は、決定された現在のMVD精度を使用してMVDを示す1つまたは複数のシンタックス要素を復号し、復号されたMVDを使用してビデオデータの符号化されたブロックを復号するように構成され得る。たとえば、上で説明されたように、ビデオデコーダ30は、現在のブロックのためのMVPと関連付けられる動きベクトルを取り出し、取り出された動きベクトルを復号されたMVPに加算して現在のブロックの動きベクトルを決定し得る。決定された動きベクトルは次いで、現在のブロックに対してインター予測を実行するために、予測ブロックを取り出すために使用され得る。
図8は、整数画素/サンプル(たとえば、色差サンプルまたは輝度サンプル)位置を示す概念図である。図8に示される整数サンプル位置は、MVまたはMVDによって表されるような、水平方向におけるビデオデータの現在のブロックからの距離についてのサンプルの数を示す。当然、同じ技法が垂直方向に適用され得る。図8に示されるように、整数ペル精度および/またはNサンプル精度の使用に応じて、MV/MVDによって示される距離を表すために、異なる符号語が使用され得る。そのような符号語と関連付けられるMVDは次いで、上で論じられたように、1つまたは複数のシンタックス要素へと二値化され符号化され得る。
フルペル200は、水平方向における現在のブロックからの1画素/サンプルの距離を表す。フルペル201は、水平方向における現在のブロックからの2画素/サンプルの距離を表す。フルペル202は、水平方向における現在のブロックからの3画素/サンプルの距離を表す。フルペル203は、水平方向における現在のブロックからの4画素/サンプルの距離を表す。図8に示されるように、水平成分のシンタックス要素を二値化してコーディングするために使用された符号語、現在のブロックから様々なサンプル距離にあるMVDは、使用されるMVD精度に応じて異なる。
フルペル200(1サンプル距離)では、整数ペルMV/MVD精度に対する符号語は1であり、一方2サンプルMV/MVD精度、3サンプルMV/MVD精度、および4サンプルMV/MVD精度の各々に対する符号語は0である。理解され得るように、1サンプルの距離の例では、2サンプルMV/MVD精度、3サンプルMV/MVD精度、および4サンプルMV/MVD精度はより不正確である(たとえば、符号語が切り捨てられるので)が、より小さい符号語をもたらす。
フルペル201(2サンプル距離)では、整数ペルMV/MVD精度に対する符号語は2であり、2サンプルMV/MVD精度に対する符号語は1であり、一方、3サンプルMV/MVD精度および4サンプルMV/MVD精度の各々に対する符号語は0である。理解され得るように、2サンプルの距離の例では、3サンプルMV/MVD精度および4サンプルMV/MVD精度はより不正確である(たとえば、符号語が切り捨てられるので)が、より小さい符号語をもたらす。
フルペル202(3サンプル距離)では、整数ペルMV/MVD精度に対する符号語は3であり、2サンプルMV/MVD精度に対する符号語は1であり(切り捨てられる)、3サンプルMV/MVD精度に対する符号語は1であり、4サンプルMV/MVD精度対する符号語は1である(切り上げられる)。理解され得るように、3サンプルの距離の例では、2サンプルMV/MVD精度および4サンプルMV/MVD精度はより不正確である(たとえば、符号語がそれぞれ、切り捨てられ切り上げられるので)。
フルペル203(4サンプル距離)では、整数ペルMV/MVD精度に対する符号語は4であり、2サンプルMV/MVD精度に対する符号語は2であり、3サンプルMV/MVD精度に対する符号語は1であり(切り捨てられる)、4サンプルMV/MVD精度対する符号語は1である。理解され得るように、4サンプルの距離の例では、3サンプルMV/MVD精度はより不正確である(たとえば、符号語が切り捨てられるので)。
本開示の別の例では、ビデオエンコーダ20は、1/4サンプルMV/MVD精度がブロック/CU/PUにおいて使用されるかどうかを示すために、シンタックス要素(たとえば、第1のフラグ)を生成するように構成され得る。1/4サンプルMV/MVDが使用されないことを第1のフラグが示すとき、ビデオエンコーダ20は、整数サンプルMV/MVD精度が使用されるか複数(N)サンプルMV/MVD精度が使用されるかを示すために、別のシンタックス要素(たとえば、別のフラグ)を生成し得る。ビデオデコーダ30は、特定のブロック/CU/PUのために使用するMV/MVD精度を決定するために、そのようなシンタックス要素を受信して構文解析するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、算術コーディングを用いて上で説明されたフラグを復号するように構成され得る。
ビデオエンコーダ20およびビデオデコーダ30は、ブロックサイズ、および/またはMVDの値、および/または参照ピクチャインデックス、および/または空間的に近隣のブロックのMVD精度情報、および/または現在のピクチャと参照ピクチャのピクチャ順序カウント(POC)の差、および/または現在のブロックの任意の他の情報に基づいて、フラグをコーディングするためのコンテキストを決定する(たとえば、コンテキスト選択を実行する)ように構成され得る。
別の例では、ビデオエンコーダ20は、特定のMV/MVD精度が現在のブロックに使用されるかどうかを示すために、シンタックス要素(たとえば、第1のフラグ)を生成するように構成され得る。特定のMV/MVD精度は、空間的に近隣のブロックのMVD精度の値に依存し得る。別の例では、特定のMVD精度は、すべての以前にコーディングされたブロックのMVD精度の統計に基づいて導出され得る。
別の例では、ビデオエンコーダ20は、ブロック/CU/PUのためのMV/MVD精度情報を示すシンタックス要素を生成するように構成され得る。この例では、シンタックス要素は、ブロック/CU/PUのMV/MVD情報のすべての成分(たとえば、水平成分と垂直成分の両方)に対してMV/MVD精度が適用されるべきであることを示し得る。別の例では、ビデオエンコーダ20は、各予測方向(たとえば、前方予測および後方予測)のための、またはブロック/CU/PUのMV/MVD情報の各成分(たとえば、水平成分および垂直成分)のための、MVD精度情報を示すシンタックス要素を生成するように構成され得る。
別の例では、ビデオエンコーダ20は、ブロック/CU/PUのためのMV/MVD精度情報を示すシンタックス要素を生成するように構成され得る。この例では、シンタックス要素は、ブロック/CU/PUのMV情報の成分の一部だけに(たとえば、水平成分または垂直成分に)対してMV/MVD精度が適用されるべきであることを示し得る。
一例では、ビデオエンコーダ20および/またはビデオデコーダ30は、各インター予測方向、参照ピクチャインデックス、現在のピクチャと参照ピクチャのPOCの差、近隣のブロックの動き情報、または動きモデル(たとえば、並進またはアフィン)に対して別々に、MVD精度情報のセットを決定し得る。
別の例では、ビデオエンコーダ20は、ピクチャ、および/またはスライス、および/またはタイル、および/またはシーケンスに使用される、許容されるMVD精度のセットを示すシンタックス要素を生成するように構成され得る。ビデオエンコーダ20は、符号化されたビデオビットストリームにおいてシンタックス要素をシグナリングし得る。一例では、ビデオエンコーダ20は、すべての許容されるMVD精度の一部分だけがピクチャまたはスライスの中のブロックに使用されることを示すために、たとえばPPSまたはスライスヘッダにおいて、そのようなシンタックス要素をシグナリングし得る。そのような情報がシグナリングされるとき、ブロックレベルMVD精度シグナリングがそれに従って変更される。
別の例では、ピクチャ、および/またはスライス、および/またはタイル、および/またはシーケンスに使用される許容されるMVD精度のセットの情報は、シグナリングを伴わずに暗黙的に導出され得る。MVD精度のセットの導出は、ピクチャのシーケンス分解能、量子化パラメータ、コーディングモード、時間レベルに依存し得る。一例では、後続のピクチャ(たとえば、ヒエラルキー構造において最も高い時間レベル)によって参照されないピクチャに対しては、整数精度またはハーフ精度だけが許容される。一例では、MV精度はMVD精度と揃えられる。別の例では、MVDはMV精度と異なる精度でシグナリングされることがあり、たとえばMVDはより高い精度で導出される。
上の例に従って、ビデオエンコーダ20は、シーケンスパラメータセット、ピクチャパラメータセット、またはスライスヘッダのうちの1つまたは複数において、3つ以上のMVD精度から現在のMVD精度を示す1つまたは複数の精度シンタックス要素を符号化するように構成され得る。別の例では、ビデオデコーダ20は、コーディング単位または予測単位の1つまたは複数に対する1つまたは複数の精度シンタックス要素を符号化し得る。一例では、1つまたは複数の精度シンタックス要素は、NサンプルMVD精度に対するNの値を示す。ビデオエンコーダ20はさらに、ピクチャのシーケンス分解能、量子化パラメータ、コーディングモード、または時間レベルのうちの1つまたは複数に基づいて、3つ以上のMVD精度を決定するように構成され得る。
上の例に従って、ビデオデコーダ30は、シーケンスパラメータセット、ピクチャパラメータセット、コーディング単位、予測単位、またはスライスヘッダのうちの1つまたは複数において、3つ以上のMVD精度から現在のMVD精度を示す1つまたは複数の精度シンタックス要素を受信し、現在のMVD精度を示す1つまたは複数の精度シンタックス要素を復号するように構成され得る。一例では、1つまたは複数の精度シンタックス要素は、NサンプルMVD精度に対するNの値を示す。ビデオデコーダ30はさらに、ピクチャのシーケンス分解能、量子化パラメータ、コーディングモード、または時間レベルのうちの1つまたは複数に基づいて、3つ以上のMVD精度を決定するように構成され得る。
別の例では、MVDがブロックに対してシグナリング/受信されないとき(たとえば、マージモードの場合)、ビデオエンコーダ20およびビデオデコーダ30は、元のMV精度(MV情報を記憶しインター予測結果を生成するために使用される精度、たとえば1/16輝度サンプルまたは1/8輝度サンプルまたは任意の他の事前に定義もしくはシグナリングされるMV精度)を使用して動きベクトル予測子を記憶するように構成され得る。MVDがブロックに対してシグナリング/受信される(およびおそらく、MVD精度も受信/シグナリングされる)とき、ビデオエンコーダ20およびビデオデコーダ30は、空間的および/または時間的な近隣のブロックからのMV予測子候補を対応するMV精度に丸めるように構成され得る。
別の例では、ビデオエンコーダ20およびビデオデコーダ30は、元のMV精度においてMV予測子を記憶するように構成され得る。別の例では、ビデオエンコーダ20およびビデオデコーダ30は、空間的および/または時間的な近隣のブロックからのMV予測子候補を、現在のブロックのMVD精度と異なる別のMV精度に丸めるように構成され得る。たとえば、複数(N)サンプルMVD精度がブロックに適用されるとき、空間的および/または時間的な近隣のブロックからのMV予測子候補は、整数輝度サンプル精度に丸められる。
本開示の別の例では、MVDをシグナリングするブロック(たとえば、AMVPコーディングされるブロック)に対して、空間的および/または時間的に近隣のブロックからのMV予測子候補が、動きベクトル予測子リストの生成プロセスにおける剪定の前に対応するMVD精度へ丸められるか/その後に丸められるかは、MVDが0であるかどうかに依存する。一例では、MV予測子が丸められるべきであるかどうかは、予測子がどこから来たか(たとえば、予測子が空間的な予測子であるか近隣の予測子であるか)に依存する。一例では、予測子が時間的に近隣のブロックからのものである場合、ビデオエンコーダ20およびビデオデコーダ30は、予測子と関連付けられる動きベクトルを丸めるように構成され得る。
一例では、MVDが参照リストに対して0に等しくない場合、ビデオエンコーダ20およびビデオデコーダ30は、空間的および/または時間的な近隣のブロックからのMV予測子候補を、動きベクトル予測子リスト生成プロセスにおける剪定の前/後に対応するMV精度へ丸めるように構成され得る。それ以外の場合(たとえば、MVDが参照リストに対して0に等しい)、ビデオエンコーダ20およびビデオデコーダ30は、空間的および/または時間的な近隣のブロックからのMV候補を、動きベクトル予測子リスト生成プロセスにおいて丸めないように構成され得る。
一例では、空間的および/または時間的な近隣のブロックからのMV候補が動きベクトル予測子リストの生成プロセスにおける剪定の前に対応するMV精度へ丸められるか/その後に丸められるかは、現在のピクチャまたはブロックのL1ZeroMvdFlagの値に依存する。L1ZeroMvdFlagが1に等しい(すなわち、現在のピクチャのすべての参照ピクチャのPOCが現在のピクチャのPOCより小さい)とき、空間的および/または時間的に近隣のブロックからのMV候補は、参照リスト1に対する動きベクトル予測子リストの生成プロセスにおける剪定の前/後に対応するMV精度へ丸められ、空間的および/または時間的な近隣のブロックからのMV候補は、参照リスト0に対する動きベクトル予測子リストの生成プロセスにおいて丸められない。L1ZeroMvdFlagが0に等しいとき、空間的および/または時間的に近隣のブロックからのMV候補は、参照リスト0と参照リスト1の両方に対する動きベクトル予測子リストの生成プロセスにおける剪定の前/後に、対応するMV精度へ丸められる。
図9は、本開示の例示的な符号化方法を示すフローチャートである。図9の技法は、ビデオエンコーダ20の1つまたは複数の構成要素によって実行され得る。
一例では、ビデオエンコーダ20は、インター予測モードを使用して符号化されるべきビデオデータのブロックを受信するように構成され得る(300)。ビデオエンコーダ20はさらに、ビデオデータのブロックに対するMVDを決定するように構成され得る(302)。ビデオエンコーダ20はさらに、3つ以上のMVD精度から、MVDを示す1つまたは複数のシンタックス要素を符号化するための現在のMVD精度を決定することができ、3つ以上のMVD精度はNサンプルMVD精度を含む(304)。一例では、NはMVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語によって示されるサンプルの数を示す整数であり、Nは1より大きい。
ビデオエンコーダ20はさらに、MVDおよびインター予測モードを使用してビデオデータのブロックを符号化し(306)、決定された現在のMVD精度を使用してMVDを示す1つまたは複数のシンタックス要素を符号化するように構成され得る(308)。
図10は、本開示の例示的な復号方法を示すフローチャートである。図10の技法は、ビデオデコーダ30の1つまたは複数の構成要素によって実行され得る。
一例では、ビデオデコーダ30は、インター予測モードを使用して符号化されたビデオデータの符号化されたブロックを受信し(400)、ビデオデータの符号化されたブロックと関連付けられるMVDを示す1つまたは複数のシンタックス要素を受信するように構成され得る(402)。ビデオデコーダ30は、3つ以上のMVD精度から、MVDを示す1つまたは複数のシンタックス要素に対する現在のMVD精度を決定するように構成されることがあり、3つ以上のMVD精度はNサンプルMVD精度を含む(404)。一例では、NはMVDを示す1つまたは複数のシンタックス要素の各々の連続する符号語によって示されるサンプルの数を示す整数であり、Nは1より大きい。
ビデオデコーダ30はさらに、決定された現在のMVD精度を使用してMVDを示す1つまたは複数のシンタックス要素を復号し(406)、復号されたMVDを使用してビデオデータの符号化されたブロックを復号するように構成され得る(408)。
一例では、ビデオデコーダ30は、ビデオデータの符号化されたブロックがイントラコーディングされないことと、ビデオデータの符号化されたブロックがマージモードまたはスキップモードでコーディングされないことと、ビデオデータの符号化されたブロックが高度動きベクトル予測(AMVP)モードでコーディングされ現在のMVDが0ではないこととが真であるとき、1つまたは複数の精度シンタックス要素を受信するように構成され得る。
一例では、ビデオデコーダ30は、1つまたは複数の精度シンタックス要素が受信されない場合、現在のMVD精度として使用するためのデフォルトの動きベクトル精度(たとえば、1/4輝度サンプル精度)を導出するように構成され得る。
一例では、ビデオデコーダ30は、1つまたは複数の精度シンタックス要素が受信されない場合、現在のMVD精度をインター予測モードに基づいて導出するように構成され得る。現在のMVD精度を導出するために、ビデオデコーダ30はさらに、インター予測モードがAMVPモードである場合に1/4輝度サンプルMV/MVD精度を導出し、インター予測モードがマージモードまたはスキップモードである場合に1/8輝度サンプルまたは1/16輝度サンプルMV/MVD精度を導出するように構成され得る。
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せとして実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を通じて送信され、ハードウェアベース処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含み得る。このように、コンピュータ可読媒体は、一般に、(1)非一時的な有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実施のための命令、コード、および/またはデータ構造を取り出すために、1つまたは複数のコンピュータまたは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品がコンピュータ可読媒体を含み得る。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る任意の他の媒体を備え得る。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびblu-ray(登録商標)ディスク(disc)を含み、ここで、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲に含まれるべきである。
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の等価な集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書において使用される「プロセッサ」という用語は、上記の構造、または本明細書で説明される技法の実施に適した任意の他の構造のいずれかを指すことがある。加えて、いくつかの例では、本明細書で説明される機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/もしくはソフトウェアモジュール内で与えられることがあり、または複合コーデックに組み込まれることがある。また、技法は、1つまたは複数の回路または論理要素で全体的に実装され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置に実装され得る。開示される技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが本開示で説明されるが、それらは必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされてよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上で説明されたような1つまたは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供されてよい。
様々な例が説明された。これらおよび他の例は、以下の特許請求の範囲内に入る。