(57)【特許請求の範囲】
【請求項１】
メモリと、
前記メモリに結合され、
ビデオフレームの現在のブロックを取得し、
前記ビデオフレームの隣接ブロックに対応する候補動きベクトル（MV）を取得し、前記隣接ブロックが前記現在のブロックに隣接しており、前記隣接ブロックが、第1の隣接ブロックおよび第2の隣接ブロックを備え、
前記候補MVの精度を取得し、前記精度が、前記第1の隣接ブロックに対応する候補MVの第1の精度および前記第2の隣接ブロックに対応する候補MVの第2の精度を含み、
丸めスキームに基づいて前記精度の第1の丸めを実行し、前記丸めスキームが、前記第1の精度または前記第2の精度の少なくとも1つを前記現在のブロックの目標精度に丸めることを含み、
前記第1の丸めに基づいて前記候補MVの第2の丸めを実行し、前記第2の丸めが切り上げまたは切り下げを含み、
前記候補MVのプルーニングを実行し、
前記第2の丸めおよび前記プルーニングに基づいて候補リストを生成する、
ように構成されたプロセッサと
を備える、装置。
【請求項２】
前記丸めスキームが、
前記現在のブロックの前記第1の精度、前記第2の精度、および前記目標精度の任意の組み合わせの中から最低精度を決定することと、
前記第1の精度、前記第2の精度、または前記目標精度の少なくとも1つを前記最低精度に丸めることと
を含む、請求項1に記載の装置。
【請求項３】
前記丸めスキームが、
前記現在のブロックの前記第1の精度、前記第2の精度、および前記目標精度の中から中央値精度を決定することと、
前記第1の精度、前記第2の精度、または前記目標精度の少なくとも1つを前記中央値精度に丸めることと
を含む、請求項1に記載の装置。
【請求項４】
前記丸めスキームが、
前記現在のブロックの前記第1の精度、前記第2の精度、および前記目標精度の任意の組み合わせの中から最高精度を決定することと、
前記第1の精度、前記第2の精度、または前記目標精度の少なくとも1つを前記最高精度に丸めることと
を含む、請求項1に記載の装置。
【請求項５】
前記丸めスキームが、
デフォルト精度を決定することと、
前記現在のブロックの前記第1の精度、前記第2の精度、または前記目標精度の少なくとも1つを前記デフォルト精度に丸めることと
を含む、請求項1に記載の装置。
【請求項６】
前記プルーニングが、同一の候補MVまたは準同一の候補MVを破棄することを含む、請求項1から5のいずれか一項に記載の装置。
【請求項７】
前記プルーニングが、前記候補リストを満たすためにゼロMVを追加することをさらに含む、請求項6に記載の装置。
【請求項８】
前記プロセッサが、前記プルーニングの前に、前記第1の丸めおよび前記第2の丸めを実行するようにさらに構成される、請求項1から7のいずれか一項に記載の装置。
【請求項９】
前記プロセッサが、前記プルーニングの後に、前記第1の丸めおよび前記第2の丸めを実行するようにさらに構成される、請求項1から7のいずれか一項に記載の装置。
【請求項１０】
前記候補リストが、高度な動きベクトル予測（AMVP）候補リストであるか、または前記候補リストがマージ候補リストである、請求項1から7のいずれか一項に記載の装置。
【請求項１１】
前記プロセッサが、
前記候補リストから最終候補MVを選択し、
エンコードされたビデオで前記最終候補MVをシグナリングする
ようにさらに構成される、請求項1から10のいずれか一項に記載の装置。
【請求項１２】
ビデオフレームの現在のブロックを取得するステップと、
前記ビデオフレームの隣接ブロックに対応する候補動きベクトル（MV）を取得するステップであって、前記隣接ブロックが前記現在のブロックに隣接し、前記隣接ブロックが、第1の隣接ブロックおよび第2の隣接ブロックを備える、ステップと、
前記候補MVの精度を取得するステップであって、前記精度が、前記第1の隣接ブロックに対応する候補MVの第1の精度および前記第2の隣接ブロックに対応する候補MVの第2の精度を含む、ステップと、
丸めスキームに基づいて前記精度の第1の丸めを実行するステップであって、前記丸めスキームが、前記第1の精度または前記第2の精度の少なくとも1つを前記現在のブロックの目標精度に丸めることを含む、ステップと、
前記第1の丸めに基づいて前記候補MVの第2の丸めを実行するステップであって、前記第2の丸めが切り上げまたは切り下げを含む、ステップと、
前記候補MVのプルーニングを実行するステップと、
前記第2の丸めおよび前記プルーニングに基づいて候補リストを生成するステップと
を含む、方法。
【請求項１３】
前記丸めスキームが、
前記現在のブロックの前記第1の精度、前記第2の精度、および前記目標精度の任意の組み合わせの中から第3の精度を決定し、前記第1の精度、前記第2の精度、または前記目標精度の少なくとも1つを前記第3の精度に丸めることであって、前記第3の精度が、最低精度、中央値精度、最高精度、またはデフォルト精度の少なくとも1つを含む、決定して丸めること
を含む、請求項12に記載の方法。
【請求項１４】
前記候補リストから最終候補MVを選択するステップと、
エンコードされたビデオで前記最終候補MVをシグナリングするステップと、
前記エンコードされたビデオを送信するステップと
をさらに含む、請求項12または13のいずれか一項に記載の方法。
【請求項１５】
エンコードされたビデオの一部分のヘッダを含む前記エンコードされたビデオを受信するように構成され、前記ヘッダが前記部分のコーディングモードのすべての動きベクトル（MV）の精度を含む、受信機であって、前記エンコードされたビデオが、
ビデオフレームの現在のブロックを取得し、
前記ビデオフレームの隣接ブロックに対応する候補動きベクトル（MV）を取得し、前記隣接ブロックが前記現在のブロックに隣接しており、前記隣接ブロックが、第1の隣接ブロックおよび第2の隣接ブロックを備え、
前記候補MVの精度を取得し、前記精度が、前記第1の隣接ブロックに対応する候補MVの第1の精度および前記第2の隣接ブロックに対応する候補MVの第2の精度を含み、
丸めスキームに基づいて前記精度の第1の丸めを実行し、前記丸めスキームが、前記第1の精度または前記第2の精度の少なくとも1つを前記現在のブロックの目標精度に丸めることを含み、
前記第1の丸めに基づいて前記候補MVの第2の丸めを実行し、前記第2の丸めが切り上げまたは切り下げを含み、
前記候補MVのプルーニングを実行し、
前記第2の丸めおよび前記プルーニングに基づいて候補リストを生成することによって生成される、受信機と、
前記受信機に結合され、前記精度に基づいてデコードされたビデオを取得するために前記エンコードされたビデオをデコードするように構成されたプロセッサと、
前記プロセッサに結合され、前記デコードされたビデオを表示するように構成されたディスプレイと
を備える装置。
【請求項１６】
前記部分が、スライス、領域、コーディングツリーユニット（CTU）、またはタイルである、請求項15に記載の装置。
【請求項１７】
前記精度が、クォーターペル精度、ハーフペル精度、整数ペル精度、または4ペル精度の1つである、請求項15または16に記載の装置。
【請求項１８】
請求項12から14のいずれか一項に記載の方法を実行するためのプログラムコードを含む、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照
この出願は、2018年5月17日に出願された「動きベクトル（MV）精度の選択および信号」と題された米国非仮特許出願シリアル番号第15／982，865号、同様に、Futurewei Technologies、Inc．によって2017年6月12日に出願された「動きベクトル予測およびマージ候補の選択」と題された米国仮特許出願第62／518，402号の優先権を主張し、参照により本明細書に組み入れられる。
【０００２】
連邦政府による資金提供に関する声明
研究または開発
適用できない。
【０００３】
マイクロフィッシュ付録への参照
適用できない。
【背景技術】
【０００４】
ビデオは比較的大量のデータを使用するため、ビデオの通信は比較的大量の帯域幅を使用する。しかしながら、多くのネットワークは、帯域幅容量またはその付近で動作する。さらに、顧客は高いビデオ品質を要求し、さらに多くのデータを使用する必要がある。したがって、ビデオの使用データ量を削減し、ビデオ品質を向上させることが望まれている。1つの解決策は、エンコードプロセス中にビデオを圧縮し、デコードプロセス中にビデオを解凍することである。圧縮および解凍技術の向上は、研究開発の焦点である。
【発明の概要】
【課題を解決するための手段】
【０００５】
本開示の一態様によれば、メモリと、メモリに結合され、ビデオフレームの現在のブロックを取得し、ビデオフレームの隣接ブロックに対応する候補MVを取得し、隣接ブロックが現在のブロックに隣接し、候補MVの精度を取得し、丸めスキームに基づいて精度の第1の丸めを実行し、第1の丸めに基づいて候補MVの第2の丸めを実行し、候補MVのプルーニングを実行し、第2の丸めおよびプルーニングに基づいて候補リストを生成する、ように構成されたプロセッサとを備える装置が提供される。
【０００６】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、隣接ブロックが第1の隣接ブロックおよび第2の隣接ブロックを備えることを提供し、精度が第1の隣接ブロックの第1の精度および第2の隣接ブロックの第2の精度を含む。
【０００７】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、丸めスキームが、第1の精度を現在のブロックの目標精度に丸めることと、第2の精度を目標精度に丸めることとを含むことを提供する。
【０００８】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、丸めスキームが、現在のブロックの第1の精度、第2の精度、および目標精度の任意の組み合わせの中から最低精度を決定することと、第1の精度、第2の精度、または目標精度の少なくとも1つを最低精度に丸めることとを含むことを提供する。
【０００９】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、丸めスキームが、現在のブロックの第1の精度、第2の精度、および目標精度の任意の組み合わせの中から中央値精度を決定することと、第1の精度、第2の精度、または目標精度の少なくとも1つを中央値精度に丸めることとを含むことを提供する。
【００１０】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、丸めスキームが、現在のブロックの第1の精度、第2の精度、および目標精度の任意の組み合わせの中から最高精度を決定することと、第1の精度、第2の精度、または目標精度の少なくとも1つを最高精度に丸めることとを含むことを提供する。
【００１１】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、丸めスキームが、デフォルト精度を決定することと、現在のブロックの第1の精度、第2の精度、または目標精度の少なくとも1つをデフォルト精度に丸めることとを含むことを提供する。
【００１２】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、プルーニングが同一の候補MVまたは準同一の候補MVを破棄することを含むことを提供する。
【００１３】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、プルーニングが候補を満たすためにゼロMVを追加することをさらに含むことを提供する。
【００１４】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、プルーニングの前に第1の丸めおよび第2の丸めをさらに実行するようにプロセッサがさらに構成されることを提供する。
【００１５】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、プルーニングの後に第1の丸めおよび第2の丸めをさらに実行するようにプロセッサがさらに構成されることを提供する。
【００１６】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、候補リストがAMVP候補リストであることを提供する。
【００１７】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、候補リストがマージ候補リストであることを提供する。
【００１８】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、プロセッサが、候補リストから最終候補MVを選択し、エンコードされたビデオで最終候補MVをシグナリングするようにさらに構成されることを提供する。
【００１９】
本開示の別の態様によれば、ビデオフレームの現在のブロックを取得するステップと、ビデオフレームの隣接ブロックに対応する候補MVを取得するステップであって、隣接ブロックが現在のブロックに隣接する、ステップと、候補MVの精度を取得するステップと、丸めスキームに基づいて精度の第1の丸めを実行するステップと、第1の丸めに基づいて候補MVの第2の丸めを実行するステップと、候補MVのプルーニングを実行するステップと、第2の丸めおよびプルーニングに基づいて候補リストを生成するステップとを含む方法が提供される。
【００２０】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、隣接ブロックが、第1の隣接ブロックおよび第2の隣接ブロックを備えることを提供し、精度が、第1の隣接ブロックの第1の精度および第2の隣接ブロックの第2の精度を含み、丸めスキームが、第1の精度を現在のブロックの目標精度に丸めることと、第2の精度を目標精度に丸めることとを含む。
【００２１】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、本方法が、候補リストから最終候補MVを選択するステップと、エンコードされたビデオで最終候補MVをシグナリングするステップと、エンコードされたビデオを送信するステップとをさらに含むことを提供する。
【００２２】
本開示の別の態様によれば、エンコードされたビデオの一部分のヘッダを含むエンコードされたビデオを受信するように構成された受信機であって、ヘッダがその部分のコーディングモードのすべてのMVの精度を含む、受信機と、受信機に結合され、精度に基づいてデコードされたビデオを取得するためにエンコードされたビデオをデコードするように構成されたプロセッサと、プロセッサに結合され、デコードされたビデオを表示するように構成されたディスプレイとを備える装置が提供される。
【００２３】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、当該部分がスライス、領域、CTU、またはタイルであることを提供する。
【００２４】
任意選択で、前述の態様のいずれかにおいて、態様の別の実装は、精度がクォーターペル精度、ハーフペル精度、整数ペル精度、または4ペル精度の1つであることを提供する。
【００２５】
上記の実施形態のいずれかは、新しい実施形態を作成するために、他の上記の実施形態のいずれかと組み合わせられ得る。これらおよび他の特徴は、添付の図面および特許請求の範囲と併せて以下の詳細な説明からより明確に理解されるであろう。
【００２６】
本開示のより十分な理解のために、ここで、添付の図面および詳細な説明に関連してなされる以下の簡単な説明が参照されており、同様の参照番号は同様の部分を表す。
【図面の簡単な説明】
【００２７】
【図１】コーディングシステムの概略図である。
【図２】ビデオフレームの一部分の図である。
【図３】本開示の一実施形態による候補リスト生成の方法を示すフローチャートである。
【図４】本開示の一実施形態による装置の概略図である。
【発明を実施するための形態】
【００２８】
最初に、1つ以上の実施形態の例示的な実装が以下に提供されるが、開示されるシステムおよび／または方法は、現在知られているか存在するかにかかわらず、任意の数の技術を使用して実装され得ることを理解していただきたい。本開示は、本明細書に例示および説明される例示的な設計および実装を含む、以下に例示される例示的な実装、図面、および技術に決して限定されるべきではなく、同等物の全範囲とともに添付の特許請求の範囲内で修正されてもよい。
【００２９】
次の略語と頭字語が適用される。
AMVP：高度な動きベクトル予測
ASIC：特定用途向け集積回路
CPU：中央処理装置
CTU：コーディングツリーユニット
DSP：デジタル信号プロセッサ
EO：電気から光へ
FPGA：フィールドプログラマブルゲートアレイ
ITU：国際電気通信連合
ITU−T：ITU電気通信標準化セクタ
LCD：液晶ディスプレイ
MV：動きベクトル
OE：光から電気へ
PPS：画像パラメータセット
RAM：ランダムアクセスメモリ
RF：無線周波数
ROM：読み取り専用メモリ
RX：受信機ユニット
SPS：シーケンスパラメータセット
SRAM：スタティックRAM
TCAM：三値連想メモリ
TX：送信機ユニット。
【００３０】
図1は、コーディングシステム100の概略図である。コーディングシステム100は、ソースデバイス110、媒体150、および宛先デバイス160を含む。ソースデバイス110および宛先デバイス160は、携帯電話、タブレットコンピュータ、デスクトップコンピュータ、ノートブックコンピュータ、または他の適切なデバイスである。媒体150は、ローカルネットワーク、無線ネットワーク、インターネット、または別の適切な媒体である。
【００３１】
ソースデバイス110は、ビデオジェネレータ120、エンコーダ130、および出力インタフェース140を備える。ビデオジェネレータ120は、ビデオを生成するのに適したカメラまたは別のデバイスである。エンコーダ130はコーデックと呼ばれることがある。エンコーダ130は、例えば、参照により組み込まれる「High Efficiency Video Coding」ITU−T H．265、2016年12月（「H．265」）で説明される、ルールのセットに従ってエンコードを実行する。出力インタフェース140は、データを宛先デバイス160に送信するのに適したアンテナまたは別のコンポーネントである。代替として、ビデオジェネレータ120、エンコーダ130、および出力インタフェース140は、デバイスの任意の適切な組み合わせである。
【００３２】
宛先デバイス160は、入力インタフェース170、デコーダ180、およびディスプレイ190を含む。入力インタフェース170は、ソースデバイス110からデータを受信するのに適したアンテナまたは別のコンポーネントである。デコーダ180はコーデックとも呼ばれることがある。デコーダ180は、例えば、H．265に説明されているようなルールのセットに従ってデコードを実行する。ディスプレイ190は、LCDスクリーンまたはビデオを表示するのに適した別のコンポーネントである。代替として、入力インタフェース170、デコーダ180、およびディスプレイ190は、デバイスの任意の適切な組み合わせである。
【００３３】
動作中、ソースデバイス110では、ビデオジェネレータ120がビデオをキャプチャし、エンコーダ130がエンコードされたビデオを作成するためにビデオをエンコードし、出力インタフェース140がエンコードされたビデオを媒体150により宛先デバイス160に向けて送信する。ソースデバイス110は、ビデオまたはエンコードされたビデオをローカルに格納してもよく、またはソースデバイス110は、ビデオまたはエンコードされたビデオの別のデバイスへの格納を指示してもよい。エンコードされたビデオは、スライスやブロックなど、様々なレベルで定義されたデータを構成する。スライスとは、エンコーダ130がビデオフレームの任意の他の領域とは別にエンコードするビデオフレームの空間的に異なる領域である。ブロックとは、長方形、例えば、8ピクセルx 8ピクセルの正方形に配置されたピクセルのグループである。ブロックは、ユニットまたはコーディングユニットと呼ばれることもある。他のレベルは、領域、CTU、およびタイルを含む。宛先デバイス160では、入力インタフェース170がソースデバイス110からエンコードされたビデオを受信し、デコーダ180がデコードされたビデオを取得するためにエンコードされたビデオをデコードして、ディスプレイ190がデコードされたビデオを表示する。デコーダ180は、エンコーダ130がビデオをエンコードする方法と比較して逆の方法でエンコードされたビデオをデコードすることができる。宛先デバイス160は、エンコードされたビデオまたはデコードされたビデオをローカルに格納するか、または宛先デバイス160が、エンコードされたビデオまたはデコードされたビデオの別のデバイスへの格納を指示する。
【００３４】
エンコードとデコードを合わせてコーディングと呼ぶ。コーディングは、それぞれイントラ予測およびインター予測と呼ばれることのあるイントラコーディングおよびインターコーディングを含む。イントラ予測は、ビデオフレーム内の空間的な冗長性を低減するために空間予測を実装する。インター予測は、連続するビデオフレーム間の時間的な冗長性を低減するために時間予測を実装する。
【００３５】
図2は、ビデオフレームの一部分200の図である。部分200は、現在のブロック210と、隣接ブロックA0 220、A1 230、B2 240、B1 250、およびB0 260を含む。現在のブロック210は、エンコーダ130が現在それをエンコードしているため、現在のブロックと呼ばれる。隣接ブロック220〜260は、現在のブロック210に隣接するため、隣接ブロックと呼ばれる。隣接ブロックA0 220は左下隅の位置にあり、隣接ブロックA1 230は左下側の位置にあり、隣接ブロックB2 240は左上隅の位置にあり、隣接ブロックB1 250は右上側の位置にあり、隣接ブロックB0 260は右上隅の位置にある。インター予測では、エンコーダ130は、隣接ブロック220〜260のMVに基づいて現在のブロック210のMVを決定する。エンコーダ130が現在のブロック210をエンコードしているとき、隣接ブロック220〜260のMVは既に知られている。
【００３６】
AMVPおよびマージは、エンコーダ130が現在のブロック210のMVを決定するために使用され得る2つのコーディングモードである。AMVPでは、エンコーダ130は、次のように隣接ブロック220〜260を順次スキャンすることによりMV候補リストを決定する、すなわち、A0 220、A1 230、A0 220のスケーリングされたバージョン、A1 230のスケーリングされたバージョン、B0 260、B1 250、B2 240、B0 260のスケーリングされたバージョン、B1 250のスケーリングされたバージョン、B2 240のスケーリングされたバージョン、時間的右下コロケーテッド候補、時間的中央コロケーテッド候補、およびゼロMVである。その候補リストから、エンコーダ130は最良の候補を選択し、信号で最良の候補を宛先デバイス160に示す。マージにおいて、エンコーダ130は、次のように隣接ブロックを順次スキャンすることにより、MVの候補リストを決定する、すなわち、A1 230、B1 250、B0 260、A0 220、B2 240、時間的右下コロケーテッド候補、時間的中央コロケーテッド候補、およびゼロMVである。その候補リストから、エンコーダ130は最良の候補を選択し、信号で最良の候補を宛先デバイス160に示す。AMVPおよびマージは隣接ブロック220〜260をスキャンするが、他のコーディングモードは、示されていない異なる隣接ブロックをスキャンしてもよい。
【００３７】
AMVPとマージの両方が、MVの精度を定義する。精度は、MVを定義する乗数として機能するピクセル間の距離を示す。精度のコンテキストでは、ピクセルはペルと呼ばれる場合がある。したがって、精度は、クォーターペル精度、ハーフペル精度、整数ペル精度、および4ペル精度を含む。クォーターペル精度は、MVが0．25、0．5、0．75、1．0、1．25などになり得るように、ピクセル間の距離の1／4を単位としてMVを定義する。エンコーダ130は、スライスヘッダのフラグとして精度をエンコードする。スライスヘッダは、スライス全体に適用可能なデータを示すスライス信号の先頭にあるヘッダである。代替として、エンコーダ130は、ブロックヘッダのフラグまたは他のデータとして精度をエンコードする。
【００３８】
AMVPとマージの両方が、候補リストの適格な候補を決定するためのルールを定義する。例えば、2つの候補MVが同じである場合には、エンコーダ130はそれらの候補MVの1つを除去する。エンコーダ130は、候補リストを許可された候補の最大数で満たすまで、それらのルールを適用し続ける。候補MVの精度が同じ場合、それらのルールは適切に定義される。しかしながら、異なる精度の候補MVに対しては、コーディング効率の良いルールを提供することが望ましい。
【００３９】
本明細書では、MV精度の選択およびシグナリングの実施形態が開示されている。実施形態は、異なる精度のMVを取得し、それらの精度を均一に丸め、MVを丸め、候補リストを生成することを提供する。実施形態は、スライス、領域、CTU、またはタイルレベルでの信号精度をさらに提供する。実施形態は、AMVP、マージ、および他の適切なコーディングモードに適用される。
AMVP候補リストの生成
【００４０】
AMVP候補リスト生成の第1の実施形態では、エンコーダ130は3つの精度を考慮する、すなわち、第1の隣接ブロック220〜260の第1の精度、第2の隣接ブロック220〜260の第2の精度、および現在のブロック210の第3の精度である。例えば、エンコーダ130は、隣接ブロック220、隣接ブロック230、および現在のブロック210の精度を考慮する。第3の精度は、エンコードの目標である現在のブロック210に関連付けられているため、目標精度と呼ばれる場合がある。3つの精度を使用して、エンコーダ130は以下の擬似コードを実行する。
i＝0
if（availableFlagLXA）｛
mvpListLX［i＋＋］＝mvLXA
if（availableFlagLXB＆＆（
RoundMvPrecisionToTarget（mvLXA）
RoundMvPrecisionToTarget（mvLXB）
mvLXA！＝mvLXB）））
mvpListLX［i＋＋］＝mvLXB
｝else if（availableFlagLXB）
mvpListLX［i＋＋］＝mvLXB
if（i＜2＆＆availableFlagLXCol）
mvpListLX［i＋＋］＝mvLXCol
while（i＜2）｛
mvpListLX［i］［0］＝0
mvpListLX［i］［1］＝0
i＋＋
｝
【００４１】
擬似コードは以下のルールを実施する、すなわち、目標精度が最高精度を使用する場合には、エンコーダ130は第1の精度と第2の精度を目標精度に切り上げる。目標精度が最低精度を使用する場合には、エンコーダ130は第1の精度と第2の精度を目標精度に切り下げる。そうでない場合、エンコーダ130は、第1の精度または第2の精度のいずれか低い方を目標精度に切り上げ、エンコーダ130は、第1の精度または第2の精度のいずれか高い方を目標精度に切り下げる。低い方は数値的に低く、高い方は数値的に高いことを意味する。したがって、0．25のクォーターペル精度は、1．0の整数ペル精度よりも低くなる。
【００４２】
精度を丸めた後、エンコーダ130は、それらの精度に基づいて候補MVを切り上げるか切り下げる。例えば、候補MVが1．25であり、0．25の固有精度を有し、目標精度が0．5である場合には、エンコーダ130は候補MVを1．5に切り上げる。固有精度は、エンコーダ130が上記の擬似コードごとにその精度を切り上げるか切り下げる前のMVの精度である。最後に、各候補MVに対して、エンコーダ130は、同一の候補MVまたは準同一の候補MVが既に候補リストにあるかどうかを決定する。そうでない場合には、エンコーダ130は、候補MVを候補リストに追加する。そうである場合には、エンコーダ130は候補MVを破棄する。準同一とは、事前定義されたしきい値内で同一であることを意味する。
【００４３】
第1の代替形態では、RoundMvPrecisionToLow（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度、第2の精度、および目標精度の中から最低精度を決定し、次に第1の精度、第2の精度、または第1の精度と第2の精度の両方のいずれかをその精度まで切り下げる。第2の代替形態では、RoundMvPrecisionToLow（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度と第2の精度の中から最低精度を決定し、次に第1の精度または第2の精度のいずれか残っている方をその精度まで切り下げる。第3の代替形態では、RoundMvPrecisionToHigh（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度、第2の精度、および目標精度の中から最高精度を決定し、次に第1の精度、第2の精度、または第1の精度と第2の精度の両方をその精度まで切り上げる。第4の代替形態では、RoundMvPrecisionToHigh（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度と第2の精度の中から最高精度を決定し、次に第1の精度または第2の精度のいずれか残っている方をその精度まで切り上げる。
【００４４】
第5の代替形態では、RoundMvPrecisionToDefault（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度および第2の精度をデフォルト精度に切り上げるかまたは切り下げるようにする。エンコーダ130は、最初に、別のデバイスからの信号のデフォルト精度を受信してもよい。第6の代替形態では、RoundMvPrecisionToMedian（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度、第2の精度、および目標精度の中から中央値精度を決定し、次に第1の精度、第2の精度、または第1の精度と第2の精度の両方をその精度まで切り上げるかまたは切り下げるようにする。エンコーダ130が偶数の精度を考慮する場合には、中央値精度は2つの中央値精度の平均であり得る。
【００４５】
AMVP候補リスト生成の第2の実施形態では、エンコーダ130は現在のブロック210の目標精度を考慮する。目標精度を使用して、エンコーダ130は次の擬似コードを実行する。
i＝0
if（availableFlagLXA）｛
mvpListLX［i＋＋］＝mvLXA
if（availableFlagLXB＆＆（mvLXA！＝mvLXB））
mvpListLX［i＋＋］＝mvLXB
｝else if（availableFlagLXB）
mvpListLX［i＋＋］＝mvLXB
if（i＜2＆＆availableFlagLXCol）
mvpListLX［i＋＋］＝mvLXCol
if（i＝＝2）
if（diffMotion（mvLXM，mvLXN））
i−−
while（i＜2）｛
mvpListLX［i］［0］＝0
mvpListLX i］［1］＝0
i＋＋
｝
擬似コードでは、diffMotion（）のmvLXMおよびmvLXNは、mvLXA、mvLXB、またはmvLXColの場合がある。
【００４６】
擬似コードは、diffMotion（）に対して次のルールを実施する。各候補MVに対して、エンコーダ130は、同一の候補MVまたは準同一の候補MVが既に候補リストにあるかどうかを決定する。そうでない場合には、エンコーダは、候補MVを候補リストに追加する。そうである場合には、エンコーダ130は候補MVを破棄する。したがって、エンコーダ130は、最初に、固有精度で候補MVを考慮する。
【００４７】
同一の候補MVまたは準同一の候補MVを除去した後、目標精度が最高精度を使用する場合には、エンコーダ130は、候補精度を目標精度に切り上げる。候補精度は、隣接ブロック220〜260の精度である。目標精度が最低精度を使用する場合には、エンコーダ130は候補精度を目標精度に切り下げる。そうでない場合、エンコーダ130は、より低い候補精度を目標精度に切り上げ、エンコーダ130は、より高い候補精度を目標精度に切り下げる。
【００４８】
精度を丸めた後、エンコーダ130は、それらの精度に基づいて候補MVを切り上げるか切り下げる。各候補MVに対して、エンコーダ130は、同一の候補MVまたは準同一の候補MVが既に候補リストにあるかどうかを決定する。そうでない場合には、エンコーダ130は、候補MVを候補リストに保持する。そうである場合には、エンコーダ130は、候補リストから候補MVを破棄する。diffMotion（）が1を返す場合には、2つの候補MVは同一または準同一ではない。diffMotion（）が0を返す場合には、2つの候補MVは同一または準同一である。最後に、候補リストが一杯でない場合には、エンコーダ130は、欠落したスポットを埋めるために0値の候補MVを挿入する。例えば、候補リストが10個のMVを有しているが、候補リストに8個のMVしか残されていない場合には、エンコーダは0値の2個のMVを挿入する。
【００４９】
第1の代替形態では、diffMotion（）は、エンコーダ130が、第1の隣接ブロック220〜260の第1の精度、第2の隣接ブロック220〜260の第2の精度、および目標精度の中から最低精度を決定し、次に残りのすべての候補精度をその精度に切り下げるように動作する。第2の代替形態では、diffMotion（）は、エンコーダ130が、第1の精度、第2の精度、および目標精度の中から最高精度を決定し、次に残りのすべての候補精度をその精度に切り上げるように動作する。第3の代替形態では、diffMotion（）は、エンコーダ130が、候補精度をデフォルト精度に切り上げるかまたは切り下げるように動作する。エンコーダ130は、最初に、別のデバイスからの信号のデフォルト精度を受信してもよい。第4の代替形態では、diffMotion（）は、エンコーダ130が第1の精度、第2の精度、および目標精度の中から中央値精度を決定し、次に第1の精度、第2の精度、または第1の精度と第2の精度の両方をその精度まで切り上げるかまたは切り下げるように動作する。エンコーダ130が偶数の精度を考慮する場合には、中央値精度は2つの中央値精度の平均であり得る。
【００５０】
上記の実施形態では、エンコーダ130はAMVP候補リストを生成した後、最終候補MVを選択してもよい。エンコーダ130は、既知の様々な基準に基づいてそうすることができる。エンコーダ130がそのようにすると、エンコーダ130は、エンコードされたビデオの最終候補MVをシグナリングすることができる。エンコーダ130は、第1の精度と第2の精度を比較する代わりに、すべての候補精度を比較してもよい。
【００５１】
マージ候補リストの生成
マージ候補リスト生成の第1の実施形態では、エンコーダ130は3つの精度を考慮する、すなわち、第1の隣接ブロック220〜260の第1の精度、第2の隣接ブロック220〜260の第2の精度、および現在のブロック210の目標精度である。マージ候補リスト生成の第1の実施形態は、AMVP候補リスト生成の第1の実施形態と同様である。3つの精度を使用して、エンコーダ130は以下の擬似コードを実行する。
i＝0
if（availableFlagA1）
mergeCandList［i＋＋］＝RoundMvPrecisionToTarget（A1）
if（availableFlagB1＆＆diffMotions（RoundMvPrecisionToTarget（B1）））
mergeCandList［i＋＋］＝B1
if（availableFlagB0＆＆diffMotions（RoundMvPrecisionToTarget（B0）））
mergeCandList［i＋＋］＝B0
if（availableFlagA0＆＆diffMotions（RoundMvPrecisionToTarget（A0）））
mergeCandList［i＋＋］＝A0
if（availableFlagB2＆＆diffMotions（RoundMvPrecisionToTarget（B2）））
mergeCandList［i＋＋］＝B2
if（availableFlagCol）
mergeCandList［i＋＋］＝diffMotions（RoundMvPrecisionToTarget（Col）））
【００５２】
擬似コードは、diffMotions（）に対して以下のルールを実施する、すなわち、目標精度が最高精度を使用する場合には、エンコーダ130は第1の精度と第2の精度を目標精度に切り上げる。目標精度が最低精度を使用する場合には、エンコーダ130は第1の精度と第2の精度を目標精度に切り下げる。そうでない場合、エンコーダ130は、第1の精度または第2の精度のいずれか低い方を目標精度に切り上げ、エンコーダ130は、第1の精度または第2の精度のいずれか高い方を目標精度に切り下げる。
【００５３】
精度を丸めた後、エンコーダ130は、それらの精度に基づいて候補MVを切り上げるか切り下げる。最後に、各候補MVに対して、エンコーダ130は、同一の候補MVまたは準同一の候補MVが既に候補リストにあるかどうかを決定する。そうでない場合には、エンコーダ130は、候補MVを候補リストに追加する。そうである場合には、エンコーダ130は、候補MVを破棄する。diffMotion（）が1を返す場合には、2つの候補MVは同一または準同一ではない。diffMotion（）が0を返す場合には、2つの候補MVは同一または準同一である。
【００５４】
第1の代替形態では、RoundMvPrecisionToLow（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度、第2の精度、および目標精度の中から最低精度を決定し、次に第1の精度、第2の精度、または第1の精度と第2の精度の両方のいずれかをその精度まで切り下げる。第2の代替形態では、RoundMvPrecisionToLow（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度と第2の精度の中から最低精度を決定し、次に第1の精度または第2の精度のいずれか残っている方をその精度まで切り下げる。第3の代替形態では、RoundMvPrecisionToHigh（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度、第2の精度、および目標精度の中から最高精度を決定し、次に第1の精度、第2の精度、または第1の精度と第2の精度の両方をその精度まで切り上げる。第4の代替形態では、RoundMvPrecisionToHigh（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度と第2の精度の中から最高精度を決定し、次に第1の精度または第2の精度のいずれか残っている方をその精度まで切り上げる。
【００５５】
第5の代替形態では、RoundMvPrecisionToDefault（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度および第2の精度をデフォルト精度に切り上げるかまたは切り下げるようにする。エンコーダ130は、最初に、別のデバイスからの信号のデフォルト精度を受信してもよい。第6の代替形態では、RoundMvPrecisionToMedian（）が、擬似コードのRoundMvPrecisionToTarget（）を置き換え、その結果、エンコーダ130は第1の精度、第2の精度、および目標精度の中から中央値精度を決定し、次に第1の精度、第2の精度、または第1の精度と第2の精度の両方をその精度まで切り上げるかまたは切り下げるようにする。エンコーダ130が偶数の精度を考慮する場合には、中央値精度は2つの中央値精度の平均であり得る。
【００５６】
マージ候補リスト生成の第2の実施形態では、エンコーダ130は現在のブロック210の目標精度を考慮する。マージ候補リスト生成の第2の実施形態は、AMVP候補リスト生成の第2の実施形態と同様である。目標精度を使用して、エンコーダ130は次の擬似コードを実行する。
i＝0
if（availableFlagA1）
mergeCandList［i＋＋］＝A1
if（availableFlagB1）
mergeCandList［i＋＋］＝B1
if（availableFlagB0）
mergeCandList［i＋＋］＝B0
if（availableFlagA0）
mergeCandList［i＋＋］＝A0
if（availableFlagB2）
mergeCandList［i＋＋］＝B2
PruneList（）；
if（availableFlagCol＆＆i＜max＿num＿candidates）
mergeCandList［i＋＋］＝Col
【００５７】
擬似コードはPruneList（）に対して以下のルールを実施する、すなわち、目標精度が最高精度を使用する場合には、エンコーダ130は候補精度を目標精度に切り上げる。候補精度は、隣接ブロック220〜260の精度である。目標精度が最低精度を使用する場合には、エンコーダ130は候補精度を目標精度に切り下げる。そうでない場合、エンコーダ130は、より低い候補精度を目標精度に切り上げ、エンコーダ130は、より高い候補精度を目標精度に切り下げる。
【００５８】
精度を丸めた後、エンコーダ130は、それらの精度に基づいて候補MVを切り上げるか切り下げる。各候補MVに対して、エンコーダ130は、同一の候補MVまたは準同一の候補MVが既に候補リストにあるかどうかを決定する。そうでない場合には、エンコーダ130は、候補MVを候補リストに追加する。そうである場合には、エンコーダ130は候補MVを破棄し、iを1だけデクリメントする。最後に、候補リストが一杯でない場合には、エンコーダ130は、欠落したスポットを埋めるために0値の候補MVを挿入する。例えば、候補リストが10個のMVを有しているが、候補リストに8個のMVしか残されていない場合には、エンコーダ130は0値の2個のMVを挿入する。
【００５９】
第1の代替形態では、PruneList（）は、エンコーダ130が、第1の隣接ブロック220〜260の第1の精度、第2の隣接ブロック220〜260の第2の精度、および目標精度の中から最低精度を決定し、次に残りのすべての候補精度をその精度に切り下げるように動作する。第2の代替形態では、PruneList（）は、エンコーダ130が、第1の精度、第2の精度、および目標精度の中から最高精度を決定し、次に残りのすべての候補精度をその精度に切り上げるように動作する。第3の代替形態では、PruneList（）は、エンコーダ130が、候補精度をデフォルト精度に切り上げるかまたは切り下げるように動作する。エンコーダ130は、最初に、別のデバイスからの信号のデフォルト精度を受信してもよい。第4の代替形態では、PruneList（）は、エンコーダ130が第1の精度、第2の精度、および目標精度の中から中央値精度を決定し、次に第1の精度、第2の精度、または第1の精度と第2の精度の両方をその精度まで切り上げるかまたは切り下げるように動作する。エンコーダ130が偶数の精度を考慮する場合には、中央値精度は2つの中央値精度の平均であり得る。
【００６０】
マージ候補リスト生成の第3の実施形態では、エンコーダ130は現在のブロック210の目標精度を考慮する。マージ候補リスト生成の第3の実施形態は、マージ候補リスト生成の第2の実施形態と同様である。しかしながら、同一の候補MVまたは準同一の候補MVの候補リストをチェックする前にPruneList（）を実行する、マージ候補リスト生成の第2の実施形態とは異なり、マージ候補リスト生成の第3の実施形態は、候補リストをチェックした後にPruneList（）を実行する。目標精度を使用して、エンコーダ130は次の擬似コードを実行する。
i＝0
if（availableFlagA1）
mergeCandList［i＋＋］＝A1
if（availableFlagB1）
mergeCandList［i＋＋］＝B1
if（availableFlagB0）
mergeCandList［i＋＋］＝B0
if（availableFlagA0）
mergeCandList［i＋＋］＝A0
if（availableFlagB2）
mergeCandList［i＋＋］＝B2
if（availableFlagCol）
mergeCandList［i＋＋］＝Col
PruneList（）
【００６１】
上記の実施形態では、エンコーダ130はマージ候補リストを生成した後、最終候補MVを選択してもよい。エンコーダ130は、既知の様々な基準に基づいてそうすることができる。エンコーダ130がそのようにすると、エンコーダ130は、エンコードされたビデオの最終候補MVをシグナリングすることができる。
【００６２】
精度シグナリング
精度シグナリングの第1の実施形態では、エンコーダ130は、以下のようにスライスヘッダのMVの精度をエンコードする。
slice＿segment＿header（）｛
coding＿mode＿idx
mv＿precision［coding＿mode＿idx］
｝
示されているように、スライスヘッダは、AMVPまたはマージのいずれかであり得る、単一コーディングモードのすべてのMVの精度を示す。
【００６３】
精度シグナリングの第2の実施形態では、エンコーダ130は、以下のようにスライスヘッダのMVの精度をエンコードする。
slice＿segment＿header（）｛
num＿coding＿mode
for（i＝0；i＜num＿coding＿mode；i＋＋）｛
coding＿mode＿idx
mv＿precision＿used＿by＿coding＿mode［coding＿mode＿idx］
｝
｝
示されているように、スライスヘッダは、AMVPおよびマージを含み得る、複数のコーディングモードのすべてのMVの精度を示す。
【００６４】
精度シグナリングの第3の実施形態では、エンコーダ130は、以下のようにスライスヘッダのMVの精度をエンコードする。
slice＿segment＿header（）｛
if（motion＿vector＿resolution＿control＿idc＝＝3）｛
num＿mv＿precision
for（i＝0；i＜num＿mv＿precision；i＋＋）｛
mv＿precision＿idx［i］
｝
｝
｝
示されているように、スライスヘッダは、AMVPおよびマージを含み得る、複数のコーディングモードのすべてのMVの精度を示す。シグナリングの第3の実施形態は、シグナリングの第2の実施形態と同様であるが、異なる構文を使用する。
【００６５】
精度シグナリングの第4の実施形態では、エンコーダ130は、以下のようにコーディングユニットヘッダのMVの精度をエンコードする。
coding＿unit（x0，y0，log2CbSize）｛
if（motion＿vector＿resolution＿control＿idc＝＝3）｛
mv＿precision＿idx＿used＿by＿coding＿mode
｝
｝
示されているように、コーディングユニットヘッダは、AMVPまたはマージのいずれかであり得る、単一コーディングモードのすべてのMVの精度を示す。
【００６６】
精度シグナリングの第5の実施形態では、エンコーダ130は、以下のようにコーディングユニットヘッダのMVの精度をエンコードする。
coding＿unit（x0，y0，log2CbSize）｛
if（motion＿vector＿resolution＿control＿idc＝＝3）｛
num＿coding＿mode
for（i＝0；i＜num＿coding＿mode；i＋＋）｛
coding＿mode＿idx
mv＿precision＿idx＿used＿by＿coding＿mode［coding＿mode＿idx］
｝
｝
｝
示されているように、コーディングユニットヘッダは、AMVPおよびマージを含み得る、複数のコーディングモードのすべてのMVの精度を示す。
【００６７】
精度シグナリングの第6の実施形態では、エンコーダ130は、｛mvr1，mvr2，．．．，mvrN｝などの形のSPSの許可されたすべての精度をエンコードする。各スライスヘッダに対して、エンコーダ130は、対応するスライスのすべてのブロックに適用することになるそれらの精度の1つを示すスライスヘッダインデックスもエンコードする。例えば、SPSは｛quarter−pel、integer−pel、four−pel｝であり、スライスヘッダインデックスは、クォーターペルを示す00、整数ペルを示す01、または4ペルを示す11のいずれかである。
【００６８】
精度シグナリングの第7の実施形態では、エンコーダ130は、｛mvr1，mvr2，．．．，mvrN｝などの形のSPSの許可されたすべての精度をエンコードする。各スライスヘッダに対して、エンコーダ130は、対応するスライスのブロックに適用することになるそれらの精度のどれかを示す複数のスライスヘッダインデックスもエンコードする。例えば、SPSは｛quarter−pel、integer−pel、four−pel｝であり、スライスヘッダインデックスは、クォーターペルを示す00、整数ペルを示す01、および4ペルを示す11の任意の組み合わせである。
【００６９】
精度シグナリングの第8の実施形態では、エンコーダ130は、｛mvr1，mvr2，．．．，mvrN｝などの形のSPSの許可されたすべての精度をエンコードする。各スライスヘッダに対して、エンコーダ130は、対応するスライスのブロックに適用することになるそれらの精度のサブセットを示すスライスヘッダインデックスもエンコードする。例えば、SPSは｛quarter−pel、integer−pel、four−pel｝であり、スライスヘッダインデックスは、｛quarter−pel、integer−pel｝を示す00、｛quarter−pel、four−pel｝を示す01、または｛integer−pel、four−pel｝を示す10である。
【００７０】
精度シグナリングの第9の実施形態では、エンコーダ130は、｛mvr1，mvr2，．．．，mvrN｝などの形のSPSの許可されたすべての精度をエンコードする。各スライスヘッダに対して、エンコーダ130は、対応するスライス内のブロックに適用することになる、その直ぐより細かいまたはより粗い精度に加えて、それらの精度の1つを示すスライスヘッダインデックスもエンコードする。例えば、SPSは｛quarter−pel、integer−pel、four−pel｝であり、スライスヘッダがより細かい精度を示す場合、スライスヘッダインデックスは｛quarter−pel｝を示す00、｛quarter−pel、integer−pel｝を示す01、または｛integer−pel、four−pel｝を示す10であるか、あるいはスライスヘッダがより粗い精度を示す場合、スライスヘッダインデックスは｛quarter−pel、integer−pel｝を示す00、｛integer−pel、four−pel｝を示す01、または｛four−pel｝を示す10である。
【００７１】
精度シグナリングの第10の実施形態では、エンコーダ130は、｛mvr1，mvr2，．．．，mvrN｝などの形のSPSの許可されたすべての精度をエンコードする。各スライスヘッダに対して、エンコーダ130は、対応するスライスのブロックに適用することになるそれらの精度のどれかを示すスライスヘッダインデックスもエンコードする。各ブロックヘッダに対して、エンコーダ130は、対応するブロックに適用することになるそれらの精度の1つを示すブロックヘッダインデックスもエンコードする。例えば、SPSは｛quarter−pel、integer−pel、four−pel｝であり、0の第1のスライスヘッダインデックスは｛quarter−pel、integer−pel｝を示し、第1のスライスヘッダの0の第1のブロックヘッダインデックスはクォーターペルを示し、第1のスライスヘッダの1の第2のブロックヘッダインデックスは整数ペルを示し、1の第2のスライスヘッダインデックスは｛integer−pel，four−pel｝を示し、第2のスライスヘッダの0の第3のブロックヘッダインデックスは整数ペルを示し、および第2のスライスヘッダの1の第4のブロックヘッダインデックスは4ペルを示す。
【００７２】
上記の実施形態では、スライスレベルでヘッダインデックスをエンコードする代わりに、エンコーダ130は、領域レベル、CTUレベル、またはタイルレベルでヘッダインデックスをエンコードしてもよい。インデックスは特定の2進数として表現されるが、任意の2進数または他の数字が使用され得る。エンコーダ130は、SPSのすべての精度を示す代わりに、PPSのすべての精度を示してもよい。エンコーダ130は、第1の精度と第2の精度を比較する代わりに、すべての候補精度を比較してもよい。
【００７３】
図3は、本開示の一実施形態による候補リスト生成の方法300を示すフローチャートである。エンコーダ130は本方法300を実行する。ステップ310では、ビデオの現在のブロックが取得される。例えば、エンコーダ130は現在のブロック210を取得する。ステップ320では、ビデオの隣接ブロックに対応する候補MVが取得される。隣接ブロックは現在のブロックに隣接する。例えば、エンコーダ130は、隣接ブロック220〜260に対応する候補MVを取得する。ステップ330では、候補MVの精度が取得される。
【００７４】
ステップ340では、精度の第1の丸めが丸めスキームに基づいて実行される。例えば、丸めスキームは上記の丸めスキームの1つである。したがって、丸めスキームは、目標精度への丸め、隣接ブロック220〜260の精度の中からの最低精度、中央値精度、または最高精度への丸め、隣接ブロック220〜260およびターゲットブロックの精度の中からの最低精度、中央値精度、または最高精度への丸め、あるいはデフォルト精度への丸めを含み得る。ステップ350では、候補MVの第2の丸めが第1の丸めに基づいて実行される。例えば、エンコーダ130はステップ340から精度を決定し、その精度に基づいて候補MVを切り上げるか切り下げる。
【００７５】
ステップ360では、候補MVのプルーニングが実行される。例えば、上記のようにプルーニングが完了される。したがって、プルーニングは、同一の候補MVを破棄すること、準同一の候補MVを破棄すること、または候補リストを満たすためにゼロMVを追加することを含んでもよい。最後に、ステップ370では、第2の丸めおよびプルーニングに基づいて候補リストが生成される。候補リストは、上記のAMVP候補リストまたはマージ候補リストであり得る。
【００７６】
図4は、本開示の一実施形態による装置400の概略図である。装置400は、開示された実施形態を実装することができる。装置400は、データを受信するための入口ポート410およびRX 420、データを処理するためのプロセッサ、論理ユニット、ベースバンドユニット、またはCPU 430、データを送信するためのTX 440および出口ポート450、ならびにデータを格納するためのメモリ460を備える。装置400は、光、電気信号、またはRF信号の入口または出口のために、入口ポート410、RX 420、TX 440、および出口ポート450に結合されたOEコンポーネント、EOコンポーネント、またはRFコンポーネントも備え得る。
【００７７】
プロセッサ430は、ハードウェア、ミドルウェア、ファームウェア、またはソフトウェアの任意の組み合わせである。プロセッサ430は、1つ以上のCPUチップ、コア、FPGA、ASIC、またはDSPの任意の組み合わせを含む。プロセッサ430は、入口ポート410、RX 420、TX 440、出口ポート450、およびメモリ460と通信する。プロセッサ430は、開示された実施形態を実装する、コーディングコンポーネント470を含む。したがって、コーディングコンポーネント470を含めることにより、装置400の機能性に実質的な改善を提供し、装置400の異なる状態への変換をもたらす。代替として、メモリ460は、命令としてコーディングコンポーネント470を格納し、プロセッサ430はそれらの命令を実行する。
【００７８】
メモリ460は、ディスク、テープドライブ、またはソリッドステートドライブの任意の組み合わせを含む。装置400は、装置400が実行するそれらのプログラムを選択するときにプログラムを格納し、それらのプログラムの実行中に装置400が読み取る命令およびデータを格納するために、メモリ460をオーバーフローデータ格納デバイスとして使用し得る。メモリ460は、揮発性または不揮発性であってもよく、ROM、RAM、TCAM、またはSRAMの任意の組み合わせであってもよい。
【００７９】
例示的な一実施形態では、装置は、メモリ要素およびメモリ要素に結合されたプロセッサ要素を備え、ビデオフレームの現在のブロックを取得し、ビデオフレームの隣接ブロックに対応する候補MVを取得し、隣接ブロックが現在のブロックに隣接し、候補MVの精度を取得し、丸めスキームに基づいて精度の第1の丸めを実行し、第1の丸めに基づいて候補MVの第2の丸めを実行し、候補MVのプルーニングを実行し、ならびに第2の丸めおよびプルーニングに基づいて候補リストを生成するように構成される。
【００８０】
いくつかの実施形態が本開示で提供されたが、開示されたシステムおよび方法は、本開示の趣旨または範囲から逸脱することなく他の多くの特定の形態で具現化され得ることが理解され得る。本実施例は例示的であり、限定的ではないと見なされるべきであり、その意図は本明細書で提供される詳細に限定されるべきではない。例えば、様々な要素またはコンポーネントは別のシステムに結合または統合されてもよく、特定の機能は、省略されてもよく、実装されなくてもよい。
【００８１】
加えて、本開示の範囲から逸脱することなく、別々または別個の様々な実施形態で説明および図示される技術、システム、サブシステム、および方法は、他のシステム、コンポーネント、技術、または方法と組み合わせまたは統合されてもよい。結合されるように示されるまたは論述される他のアイテムは、直接結合されても、電気的、機械的、またはその他の何らかのインタフェース、デバイス、または中間コンポーネントを介して間接的に結合されても、または通信してもよい。変更、置換、および改変の他の例は、当業者によって確認可能であり、本明細書で開示される趣旨および範囲から逸脱することなく行われ得る。
【符号の説明】
【００８２】
100  コーディングシステム
110  ソースデバイス
120  ビデオジェネレータ
130  エンコーダ
140  出力インタフェース
150  媒体
160  宛先デバイス
170  入力インタフェース
180  デコーダ
190  ディスプレイ
200  ビデオフレームの一部分
210  現在のブロック
220  隣接ブロックA0
230  隣接ブロックA1
240  隣接ブロックB2
250  隣接ブロックB1
260  隣接ブロックB0
400  装置
410  入口ポート
420  RX
430  プロセッサ
440  TX
450  出口ポート
460  メモリ
470  コーディングコンポーネント
【図１】
0006915159.tif 000002
【図２】
0006915159.tif 000003
【図３】
0006915159.tif 000004
【図４】
0006915159.tif 000005