説明

大型マクロ・ブロックを用いたビデオ・コーディング

【課題】従来のビデオ符号化および復号規格によって規定されたマクロ・ブロックよりも大きいマクロ・ブロックを使用してデジタル・ビデオ・データを符号化および復号するための技法を提供する。
【解決手段】ビデオ・デコーダを用いて、複数のビデオ・ブロックを備えるコード化ユニットを受信し、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備え、コード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す最大サイズ値を含むコード化ユニットのシンタックス情報を受信し、最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択し、選択されたブロック・タイプ・シンタックス・デコーダを使用してコード化ユニット中の複数のビデオ・ブロックの各々を復号する。

【発明の詳細な説明】
【技術分野】
【0001】
本出願は、各々の全体が参照により本明細書に組み込まれる、2008年10月3日に出願された米国仮出願第61/102,787号、2009年1月13日に出願された米国仮出願第61/144,357号、および2009年4月3日に出願された米国仮出願第61/166,631号の利益を主張する。
【0002】
本出願は、すべて本出願の譲受人に譲渡され、それらの全文がすべての目的のために参照により本明細書に明確に組み込まれる、すべて本出願と同日に出願された、(一時的に代理人整理番号第090033U1号、第090033U2号、第030033U3号によって参照される)すべて同じ名称「VIDEO CODING WITH LARGE MACROBLOCKS」を有する米国特許出願に関する。
【0003】
本開示は、デジタル・ビデオ・コーディングに関し、より詳細には、ブロック・ベースのビデオ・コーディングに関する。
【背景技術】
【0004】
デジタル・ビデオ機能は、デジタル・テレビジョン、デジタル・ダイレクト・ブロードキャスト・システム、ワイヤレス・ブロードキャストシステム、携帯情報端末(PDA)、ラップ・トップまたはデスク・トップ・コンピュータ、デジタル・カメラ、デジタル記録デバイス、ビデオ・ゲーム・デバイス、ビデオ・ゲーム・コンソール、セルラー電話または衛星無線電話などを含む、広範囲にわたるデバイスに組み込むことができる。デジタル・ビデオ・デバイスは、MPEG−2、MPEG−4、ITU−T H.263またはITU−T H.264/MPEG−4、Part10、Advanced Video Coding(AVC)、およびそのような規格の拡張によって定義された規格に記載されているビデオ圧縮技法などのビデオ圧縮技法を実装して、デジタル・ビデオ情報をより効率的に送信および受信する。
【0005】
ビデオ圧縮技法では、ビデオ・シーケンスに固有の冗長性を低減または除去するために空間的予測および/または時間的予測を実行する。ブロック・ベースのビデオ・コーディングの場合、ビデオ・フレームまたはスライスをマクロ・ブロックに区分することができる。各マクロ・ブロックはさらに区分できる。イントラ・コード化(I)フレームまたはスライス中のマクロ・ブロックは、近傍マクロ・ブロックに関する空間的予測を使用して符号化される。インター・コード化(PまたはB)フレームまたはスライス中のマクロ・ブロックは、同じフレームまたはスライス中の近傍マクロ・ブロックに関する空間的予測、あるいは他の参照フレームに関する時間的予測を使用することができる。
【発明の概要】
【0006】
概して、本開示では、大型マクロ・ブロックを使用してデジタル・ビデオ・データを符号化するための技法について説明する。大型マクロ・ブロックは、既存のビデオ符号化規格によって一般に規定されたマクロ・ブロックよりも大きい。たいていのビデオ符号化規格は、16×16ピクセルアレイの形態のマクロ・ブロックの使用を規定する。本開示によれば、エンコーダおよびデコーダは、サイズが16×16ピクセルよりも大きい大型マクロ・ブロックを利用することができる。例として、大型マクロ・ブロックは、32×32、64×64、またはより大きいピクセルアレイを有することができる。
【0007】
ビデオ・コーディングは、ビデオ・データの圧縮をサポートするために空間的および/または時間的冗長性に依拠する。より高い空間分解能および/またはより高いフレーム・レートを用いて生成されるビデオ・フレームは、より多くの冗長性をサポートすることができる。大型マクロ・ブロックの使用は、本開示で説明するように、ビデオ・コーディング技法が、空間分解能および/またはフレーム・レートが増加するにつれて生じる、より大きい程度の冗長性を利用することを可能にし得る。本開示によれば、ビデオ・コーディング技法は、大型マクロ・ブロックのコーディングをサポートするための様々な特徴を利用することができる。
【0008】
本開示で説明するように、大型マクロ・ブロックコーディング技法は、大型マクロ・ブロックをパーティションに区分し、選択されたパーティションに対して、様々なパーティション・サイズおよび様々なコーディング・モード、たとえば、様々な空間(I)または時間(PまたはB)モードを使用することができる。別の例として、コーディング技法は、大型マクロ・ブロック内で非0係数を有するコード化マクロ・ブロックおよびパーティションを効率的に識別するために、階層コード化ブロック・パターン(CBP)値を利用することができる。さらなる一例として、コーディング技法は、より好都合な結果を生じるマクロ・ブロック・サイズを選択するために、大型マクロ・ブロックと小型マクロ・ブロックとを使用するコーディングによって生成されるレートひずみメトリックを比較することができる。
【0009】
一例では、本開示は、ビデオ・エンコーダを用いて、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを符号化することと、ブロックのサイズを示すブロック・タイプ・シンタックス情報を生成することと、符号化ブロックのコード化ブロック・パターン値を生成することであって、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す、生成することとを備える方法を提供する。
【0010】
別の例では、本開示は、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを符号化することと、ブロックのサイズを示すブロック・タイプ・シンタックス情報を生成することと、符号化ブロックのコード化ブロック・パターン値を生成することであって、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す、生成することとを行うように構成されたビデオ・エンコーダを備える装置を提供する。
【0011】
別の例では、本開示は、ビデオ・エンコーダを用いて、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを符号化することと、ブロックのサイズを示すブロック・タイプ・シンタックス情報を生成することと、符号化ブロックのコード化ブロック・パターン値を生成することであって、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す、生成することとをビデオ符号化装置に行わせるための命令で符号化されたコンピュータ可読媒体を提供する。
【0012】
追加の例では、本開示は、ビデオ・デコーダを用いて、16×16ピクセルよりも大きいサイズを有する符号化ビデオ・ブロックを受信することと、符号化ブロックのサイズを示すブロック・タイプ・シンタックス情報を受信することと、符号化ブロックのコード化ブロック・パターン値を受信することであって、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す、受信することと、ブロック・タイプ・シンタックス情報と符号化ブロックのコード化ブロック・パターン値とに基づいて符号化ブロックを復号することとを備える方法を提供する。
【0013】
さらなる一例では、本開示は、16×16ピクセルよりも大きいサイズを有する符号化ビデオ・ブロックを受信することと、符号化ブロックのサイズを示すブロック・タイプ・シンタックス情報を受信することと、符号化ブロックのコード化ブロック・パターン値を受信することであって、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す、受信することと、ブロック・タイプ・シンタックス情報と符号化ブロックのコード化ブロック・パターン値とに基づいて符号化ブロックを復号することとを行うように構成されたビデオ・デコーダを備える装置を提供する。
【0014】
別の例では、本開示は、16×16ピクセルよりも大きいサイズを有する符号化ビデオ・ブロックを受信することと、符号化ブロックのサイズを示すブロック・タイプ・シンタックス情報を受信することと、符号化ブロックのコード化ブロック・パターン値を受信することであって、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す、受信することと、ブロック・タイプ・シンタックス情報と符号化ブロックのコード化ブロック・パターン値とに基づいて符号化ブロックを復号することとをビデオ・デコーダに行わせるための命令を備えるコンピュータ可読媒体を提供する。
【0015】
別の例では、本開示は、ビデオ・エンコーダを用いて、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信することと、そのブロックをパーティションに区分することと、第1の符号化モードを使用してパーティションのうちの1つを符号化することと、第1の符号化モードとは異なる第2の符号化モードを使用してパーティションのうちの別の1つを符号化することと、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を生成することとを備える方法を提供する。
【0016】
追加の例では、本開示は、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信することと、そのブロックをパーティションに区分することと、第1の符号化モードを使用してパーティションのうちの1つを符号化することと、第1の符号化モードとは異なる第2の符号化モードを使用してパーティションのうちの別の1つを符号化することと、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を生成することとを行うように構成されたビデオ・エンコーダを備える装置を提供する。
【0017】
別の例では、本開示は、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信することと、そのブロックをパーティションに区分することと、第1の符号化モードを使用してパーティションのうちの1つを符号化することと、第1の符号化モードとは異なる第2の符号化モードを使用してパーティションのうちの別の1つを符号化することと、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を生成することとをビデオ・エンコーダに行わせるための命令で符号化されたコンピュータ可読媒体を提供する。
【0018】
さらなる一例では、本開示は、ビデオ・デコーダを用いて、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信することであって、そのブロックがパーティションに区分され、パーティションのうちの1つが第1の符号化モードで符号化され、パーティションのうちの別の1つが第1の符号化モードとは異なる第2の符号化モードで符号化される、受信することと、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を受信することと、ブロック・タイプ・シンタックス情報に基づいてビデオ・ブロックを復号することとを備える方法を提供する。
【0019】
別の例では、本開示は、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信することであって、そのブロックがパーティションに区分され、パーティションのうちの1つが第1の符号化モードで符号化され、パーティションのうちの別の1つが第1の符号化モードとは異なる第2の符号化モードで符号化される、受信することと、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を受信することと、ブロック・タイプ・シンタックス情報に基づいてビデオ・ブロックを復号することとを行うように構成されたビデオ・デコーダを備える装置を提供する。
【0020】
追加の例では、本開示は、ビデオ・デコーダを用いて、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信することであって、そのブロックがパーティションに区分され、パーティションのうちの1つが第1の符号化モードで符号化され、パーティションのうちの別の1つが第1の符号化モードとは異なる第2の符号化モードで符号化される、受信することと、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を受信することと、ブロック・タイプ・シンタックス情報に基づいてビデオ・ブロックを復号することとをビデオ・デコーダに行わせるための命令で符号化されたコンピュータ可読媒体を提供する。
【0021】
別の例では、本開示は、デジタル・ビデオ・エンコーダを用いて、ビデオ・コーディング・ユニットを受信することと、16×16ピクセルのサイズをもつ第1のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化するための第1のレートひずみメトリックを判断することと、16×16ピクセルよりも大きいサイズをもつ第2のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化するための第2のレートひずみメトリックを判断することと、第1のレートひずみメトリックが第2のレートひずみメトリックよりも小さいとき、第1のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化することと、第2のレートひずみメトリックが第1のレートひずみメトリックよりも小さいとき、第2のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化することとを備える方法を提供する。
【0022】
追加の例では、本開示は、ビデオ・コーディング・ユニットを受信することと、16×16ピクセルのサイズをもつ第1のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化するための第1のレートひずみメトリックを判断することと、16×16ピクセルよりも大きいサイズをもつ第2のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化するための第2のレートひずみメトリックを判断することと、第1のレートひずみメトリックが第2のレートひずみメトリックよりも小さいとき、第1のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化することと、第2のレートひずみメトリックが第1のレートひずみメトリックよりも小さいとき、第2のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化することとを行うように構成されたビデオ・エンコーダを備える装置を提供する。
【0023】
別の例では、本開示は、ビデオ・コーディング・ユニットを受信することと、16×16ピクセルのサイズをもつ第1のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化するための第1のレートひずみメトリックを判断することと、16×16ピクセルよりも大きいサイズをもつ第2のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化するための第2のレートひずみメトリックを判断することと、第1のレートひずみメトリックが第2のレートひずみメトリックよりも小さいとき、第1のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化することと、第2のレートひずみメトリックが第1のレートひずみメトリックよりも小さいとき、第2のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化することとをビデオ・エンコーダに行わせるための命令で符号化されたコンピュータ可読媒体を提供する。
【0024】
別の例では、本開示は、ビデオ・エンコーダを用いて、複数のビデオ・ブロックを備えるコード化ユニットを符号化することであって、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、符号化することと、最大サイズ値を含むコード化ユニットのシンタックス情報を生成することであって、最大サイズ値がコード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、生成することとを備える方法を提供する。
【0025】
別の例では、本開示は、複数のビデオ・ブロックを備えるコード化ユニットを符号化することであって、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、符号化することと、最大サイズ値を含むコード化ユニットのシンタックス情報を生成することであって、最大サイズ値がコード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、生成することとを行うように構成されたビデオ・エンコーダを備える装置を提供する。
【0026】
別の例では、本開示は、複数のビデオ・ブロックを備えるコード化ユニットを符号化するための手段であって、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、符号化するための手段と、最大サイズ値を含むコード化ユニットのシンタックス情報を生成するための手段であって、最大サイズ値がコード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、生成するための手段とを備える装置を提供する。
【0027】
別の例では、本開示は、複数のビデオ・ブロックを備えるコード化ユニットを符号化することであって、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、符号化することと、最大サイズ値を含むコード化ユニットのシンタックス情報を生成することであって、最大サイズ値がコード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、生成することとをプログラマブル・プロセッサに行わせるための命令で符号化されたコンピュータ可読媒体を提供する。
【0028】
別の例では、本開示は、ビデオ・デコーダを用いて、複数のビデオ・ブロックを備えるコード化ユニットを受信することであって、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、受信することと、最大サイズ値を含むコード化ユニットのシンタックス情報を受信することであって、最大サイズ値がコード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、受信することと、最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択することと、選択されたブロック・タイプ・シンタックス・デコーダを使用してコード化ユニット中の複数のビデオ・ブロックの各々を復号することとを備える方法を提供する。
【0029】
別の例では、本開示は、複数のビデオ・ブロックを備えるコード化ユニットを受信することであって、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、受信することと、最大サイズ値を含むコード化ユニットのシンタックス情報を受信することであって、最大サイズ値がコード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、受信することと、最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択することと、選択されたブロック・タイプ・シンタックス・デコーダを使用してコード化ユニット中の複数のビデオ・ブロックの各々を復号することとを行うように構成されたビデオ・デコーダを備える装置を提供する。
【0030】
別の例では、本開示は、複数のビデオ・ブロックを備えるコード化ユニットを受信するための手段であって、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、受信するための手段と、最大サイズ値を含むコード化ユニットのシンタックス情報を受信するための手段であって、最大サイズ値がコード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、受信するための手段と、最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択するための手段と、選択されたブロック・タイプ・シンタックス・デコーダを使用してコード化ユニット中の複数のビデオ・ブロックの各々を復号するための手段とを提供する。
【0031】
別の例では、本開示は、複数のビデオ・ブロックを備えるコード化ユニットを受信することであって、複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、受信することと、最大サイズ値を含むコード化ユニットのシンタックス情報を受信することであって、最大サイズ値がコード化ユニット中の複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、受信することと、最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択することと、選択されたブロック・タイプ・シンタックス・デコーダを使用してコード化ユニット中の複数のビデオ・ブロックの各々を復号することとをプログラマブル・プロセッサに行わせるための命令で符号化されたコンピュータ可読媒体を提供する。
【0032】
1つまたは複数の例の詳細は、添付の図面および以下の説明に記載されている。他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【0033】
【図1】大型マクロ・ブロックを使用してデジタル・ビデオ・データを符号化および復号する例示的なビデオ符号化および復号システムを示すブロック図。
【図2】大型マクロ・ブロックをコーディングするための技法を実装するビデオ・エンコーダの一例を示すブロック図。
【図3】大型マクロ・ブロックをコーディングするための技法を実装するビデオ・デコーダの一例を示すブロック図。
【図4A】大型マクロ・ブロックの様々なレベルの中の区分を示す概念図。
【図4B】大型マクロ・ブロックの様々なパーティションへの様々なコーディング・モードの割当てを示す概念図。
【図5】大型マクロ・ブロックの様々なレベルの階層図を示す概念図。
【図6】64×64ピクセル大型マクロ・ブロックのコード化ブロック・パターン(CBP)値をセットするための例示的な方法を示すフローチャート。
【図7】64×64ピクセル大型マクロ・ブロックの32×32ピクセル・パーティションのCBP値をセットするための例示的な方法を示すフローチャート。
【図8】64×64ピクセル大型マクロ・ブロックの32×32ピクセル・パーティションの16×16ピクセル・パーティションのCBP値をセットするための例示的な方法を示すフローチャート。
【図9】2ビットluma16×8_CBP値を判断するための例示的な方法を示すフローチャート。
【図10】64×64ピクセル大型マクロ・ブロックの例示的な構成を示すブロック図。
【図11】N×Nピクセル大型ビデオ・ブロックのための最適な区分および符号化方法を計算するための例示的な方法を示すフローチャート。
【図12】様々なパーティションと各パーティションのための選択された符号化方法とをもつ例示的な64×64ピクセル・マクロ・ブロックを示すブロック図。
【図13】ビデオ・シーケンスのフレームを符号化するためのマクロ・ブロックの最適サイズを判断するための例示的な方法を示すフローチャート。
【図14】大型マクロ・ブロックを使用してデジタル・ビデオ・データをコーディングするビデオ・エンコーダ/デコーダ(コーデック)を含む例示的なワイヤレス通信デバイスを示すブロック図。
【図15】大型マクロ・ブロックのための階層CBP表現の例示的なアレイ表現を示すブロック図。
【図16】図15の階層CBP表現に対応する例示的なツリー構造を示すブロック図。
【図17】コード化ユニットのビデオ・ブロックのためのブロック・ベースのシンタックスエンコーダおよびデコーダを示し、選択するために、コード化ユニットのシンタックス情報を使用するための例示的な方法を示すフローチャート。
【発明を実施するための形態】
【0034】
本開示では、大型マクロ・ブロックを使用してデジタル・ビデオ・データを符号化および復号するための技法について説明する。大型マクロ・ブロックは、既存のビデオ符号化規格によって一般に規定されたマクロ・ブロックよりも大きい。たいていのビデオ符号化規格は、16×16ピクセルアレイの形態のマクロ・ブロックの使用を規定する。本開示によれば、エンコーダおよび/またはデコーダは、サイズが16×16ピクセルよりも大きい大型マクロ・ブロックを利用することができる。例として、大型マクロ・ブロックは、32×32、64×64、または場合によってはより大きいピクセルアレイを有することができる。
【0035】
概して、本開示で使用するマクロ・ブロックという用語は、N×Nピクセルとして表される定義されたサイズを備えるピクセルアレイのデータ構造を指すことができ、Nは正の整数値である。マクロ・ブロックは、以下でより詳細に説明するように、各々が(N/2)×(N/2)ピクセルアレイを備える4つの輝度ブロックと、各々がN×Nピクセルアレイを備える2つのクロミナンスブロックと、マクロ・ブロック・タイプ情報とコード化ブロック・パターン(CBP)情報とを備えるヘッダとを定義することができる。
【0036】
従来のビデオ・コーディング規格は、通常、定義されたマクロ・ブロック・サイズが16×16ピクセルアレイであることを規定する。本開示で説明する様々な技法によれば、マクロ・ブロックは、Nが16よりも大きいことがあるN×Nピクセルアレイを備えることができる。同様に、従来のビデオ・コーディング規格は、インター符号化マクロ・ブロックには、一般に、単一の動きベクトルが割り当てられることを規定する。本開示で説明する様々な技法によれば、以下でより詳細に説明するように、複数の動きベクトルをN×Nマクロ・ブロックのインター符号化パーティションに割り当てることができる。「大型マクロ・ブロック」または同様のフレーズへの言及は、一般に、16×16よりも大きいピクセルアレイをもつマクロ・ブロックを指す。
【0037】
場合によっては、大型マクロ・ブロックは、画質を維持または場合によっては改善しながら、符号化効率の改善および/またはデータ送信オーバーヘッドの低減をサポートすることができる。たとえば、大型マクロ・ブロックの使用は、ビデオ・エンコーダおよび/またはデコーダが、増加した空間分解能(たとえば、1280×720または1920×1080ピクセル毎フレーム)および/または増加したフレーム・レート(たとえば、30または60フレーム毎秒)を用いて生成されるビデオ・データによって与えられる増加した冗長性を利用することを可能にし得る。
【0038】
一例として、1280×720ピクセル毎フレームの空間分解能と60フレーム毎秒のフレーム・レートとをもつデジタル・ビデオ・シーケンスは、176×144ピクセル毎フレームの空間分解能と15フレーム毎秒のフレーム・レートとをもつデジタル・ビデオ・シーケンスよりも空間的に36倍大きく、時間的に4倍速い。マクロ・ブロック・サイズの増加によって、ビデオ・エンコーダおよび/またはデコーダは、ビデオ・データの圧縮をサポートするために、増加した空間的および/または時間的冗長性をより良く利用することができる。
【0039】
また、より大きいマクロ・ブロックを使用することによって、所与のフレームまたはスライスについてより少数のブロックが符号化され、送信される必要があるオーバーヘッド情報の量が低減し得る。言い換えれば、より大きいマクロ・ブロックは、フレームまたはスライス当たりのコーディングされるマクロ・ブロックの総数の低減を可能にすることができる。たとえば、フレームの空間分解能が4倍だけ増加した場合、16×16マクロ・ブロックの4倍がフレーム中のピクセルために必要とされるであろう。この例では、64×64マクロ・ブロックを用いて、増加した空間分解能を扱うために必要とされるマクロ・ブロックの数が低減される。フレームまたはスライス当たりのマクロ・ブロックの数の低減によって、たとえば、シンタックス情報、動きベクトルデータなどのコーディング情報の累積量を低減することができる。
【0040】
本開示では、マクロ・ブロックのサイズは、一般に、たとえば、64×64、32×32、16×16など、マクロ・ブロック中に含まれているピクセル数を指す。したがって、大型マクロ・ブロック(たとえば、64×64または32×32)は、16×16マクロ・ブロックよりも大きいピクセル数を含んでいるという意味で大型であるとすることができる。しかしながら、大型マクロ・ブロックの垂直寸法と水平寸法とによって画定される空間エリア、すなわち、ビデオ・フレームの垂直および水平の寸法によって画定されるエリアの一部分として画定される空間エリアは、従来の16×16マクロ・ブロックのエリアよりも大きいこともあり、大きくないこともある。いくつかの例では、大型マクロ・ブロックのエリアは、従来の16×16マクロ・ブロックと同じまたは同様とすることができる。しかしながら、大型マクロ・ブロックは、マクロ・ブロック内のより大きいピクセル数とピクセルのより高い空間的密度とによって特徴づけられるより高い空間分解能を有する。
【0041】
マクロ・ブロックのサイズは、フレーム中のピクセル数、すなわち、フレーム中の空間分解能に少なくとも部分的に基づいて構成できる。フレームがより大きいピクセル数を有する場合、大型マクロ・ブロックは、より大きいピクセル数を有するように構成できる。一例として、ビデオ・エンコーダは、30フレーム毎秒で表示される1280×720ピクセル・フレームに対して32×32ピクセル・マクロ・ブロックを利用するように構成できる。別の例として、ビデオ・エンコーダは、60フレーム毎秒で表示される1280×720ピクセル・フレームに対して64×64ピクセル・マクロ・ブロックを利用するように構成できる。
【0042】
エンコーダによって符号化された各マクロ・ブロックは、マクロ・ブロックの1つまたは複数の特性を記述するデータを必要とすることがある。データは、たとえば、マクロ・ブロックのサイズと、マクロ・ブロックが区分される方法と、マクロ・ブロックおよび/またはそのパーティションに適用されるコーディング・モード(空間または時間)とを表すためのマクロ・ブロック・タイプ・データを示すことができる。さらに、データは、マクロ・ブロックおよび/またはそのパーティションの動きベクトル情報を表す他のシンタックス要素とともに、動きベクトル差(mvd)データを含むことができる。また、データは、予測後の残差情報を表すために、他のシンタックス要素とともにコード化ブロック・パターン(CBP)値を含むことができる。マクロ・ブロック・タイプ・データは、大型マクロ・ブロックの単一のマクロ・ブロック・ヘッダ中で与えられ得る。
【0043】
上述のように、大型マクロ・ブロックを利用することによって、エンコーダは、フレームまたはスライス当たりのマクロ・ブロックの数を低減することができ、それによって、各フレームまたはスライスのために送信される必要がある正味のオーバーヘッドの量を低減することができる。また、大型マクロ・ブロックを利用することにより、特定のフレームまたはスライスについてマクロ・ブロックの総数が減少し、ユーザに表示されるビデオ中のブロッキーアーティファクトを低減することができる。
【0044】
本開示で説明するビデオ・コーディング技法は、大型マクロ・ブロックのコーディングをサポートするための1つまたは複数の特徴を利用することができる。たとえば、大型マクロ・ブロックをより小さいパーティションに区分することができる。大型マクロ・ブロック内の選択されたパーティションに様々なコーディング・モード、たとえば、様々な空間(I)コーディング・モードまたは時間(PまたはB)コーディング・モードを適用することができる。また、残差データを表す非0変換係数を有するコード化マクロ・ブロックおよびパーティションを効率的に識別するために、階層コード化ブロック・パターン(CBP)値を利用することができる。さらに、好都合な結果を生じるマクロ・ブロック・サイズを選択するために、大型マクロ・ブロック・サイズと小型マクロ・ブロック・サイズとを使用するコーディングについてレートひずみメトリックを比較することができる。さらに、様々なサイズのマクロ・ブロックを備えるコード化ユニット(たとえば、フレーム、スライス、シーケンス、またはピクチャ・グループ)は、コード化ユニット中の最も大きいマクロ・ブロックのサイズを示すシンタックス要素を含むことができる。以下でより詳細に説明するように、大型マクロ・ブロックは、標準の16×16ピクセルブロックとは異なるブロックレベルシンタックスを備える。したがって、コード化ユニット中の最も大きいマクロ・ブロックのサイズを示すことによって、エンコーダは、コード化ユニットのマクロ・ブロックに適用すべきブロックレベルシンタックス・デコーダをデコーダにシグナリングすることができる。
【0045】
大型マクロ・ブロック中の様々なパーティションのための様々なコーディング・モードの使用は、大型マクロ・ブロックの混合モード・コーディングと呼ばれることがある。すべてのパーティションが同じイントラ・コーディング・モードまたはインター・コーディング・モードを有するように大型マクロ・ブロックを一様にコーディングする代わりに、いくつかのパーティションが様々なイントラ・コーディング・モード(たとえば、I_16×16、I_8×8、I_4×4)またはイントラ・コーディング・モードおよびインター・コーディング・モードなど、様々なコーディング・モードを有するように大型マクロ・ブロックをコーディングすることができる。
【0046】
大型マクロ・ブロックを2つ以上のパーティションに分割する場合、たとえば、少なくとも1つのパーティションを第1のモードでコード化し、別のパーティションを、第1のモードとは異なる第2のモードでコード化することができる。場合によっては、第1のモードを第1のIモードとし、第2のモードを、第1のIモードとは異なる第2のIモードとすることができる。他の場合には、第1のモードをIモードとし、第2のモードをPモードまたはBモードとすることができる。したがって、いくつかの例では、大型マクロ・ブロックは、1つまたは複数の時間的(PまたはB)コード化パーティションおよび1つまたは複数の空間的(I)コード化パーティション、または様々なIモードを用いた1つまたは複数の空間的コード化パーティションを含むことができる。
【0047】
1つまたは複数の階層コード化ブロック・パターン(CBP)値を使用して、大型マクロ・ブロック中のいずれかのパーティションが少なくとも1つの非0変換係数を有するかどうか、そうであれば、どのパーティションかを効率的に記述することができる。変換係数は大型マクロ・ブロックの残差データを符号化する。大型マクロ・ブロックレベルCBPビットは、大型マクロ・ブロック中のいずれかのパーティションが非0量子化係数を含むかどうかを示す。そうでない場合、大型マクロ・ブロック全体が非0係数を有しないことがわかっているので、パーティションのいずれかが非0係数を有するかどうかを検討する必要はない。この場合、予測マクロ・ブロックを使用して、残差データなしにマクロ・ブロックを復号することができる。
【0048】
代替的に、マクロ・ブロックレベルCBP値が、大型マクロ・ブロック中の少なくとも1つのパーティションが非0係数を有することを示す場合、どのパーティションが少なくとも1つの非0係数を含むかを識別するために、パーティション・レベルCBP値を分析することができる。デコーダは、次いで、少なくとも1つの非0係数を有するパーティションの当該の残差データを検索し、残差データと予測ブロックデータとを使用してパーティションを復号することができる。場合によっては、1つまたは複数のパーティションは、非0係数を有し、したがって当該の指示をもつパーティション・レベルCBP値を含むことができる。大型マクロ・ブロックと、パーティションのうちの少なくともいくつかの両方は、16×16ピクセルよりも大きいとすることができる。
【0049】
好都合なレートひずみメトリックを生じるマクロ・ブロック・サイズを選択するために、大型マクロ・ブロック(たとえば、32×32または64×64)と小型マクロ・ブロック(たとえば、16×16)の両方についてレートひずみメトリックを分析することができる。たとえば、エンコーダは、フレームまたはスライスなどのコード化ユニットの16×16マクロ・ブロックと、32×32マクロ・ブロックと、64×64マクロ・ブロックとのレートひずみメトリックを比較することができる。エンコーダは、次いで、最良のレートひずみを生じるマクロ・ブロック・サイズを選択し、選択されたマクロ・ブロック・サイズ、すなわち、最良のレートひずみをもつマクロ・ブロック・サイズを使用してコード化ユニットを符号化することができる。
【0050】
選択は、3つ以上のパス、たとえば、16×16ピクセル・マクロ・ブロックを使用する第1のパス、32×32ピクセル・マクロ・ブロックを使用する第2のパス、および64×64ピクセル・マクロ・ブロックを使用する第3のパスにおいてフレームまたはスライスを符号化し、各パスのレートひずみメトリックを比較することに基づくことができる。このようにして、エンコーダは、マクロ・ブロック・サイズを変化させ、スライスまたはフレームなど所与のコーディング・ユニットのための最良または最適なレートひずみを生じるマクロ・ブロック・サイズを選択することによって、レートひずみを最適化することができる。エンコーダは、さらに、コード化ユニット中で使用されるマクロ・ブロックのサイズを識別するコード化ユニットのシンタックス情報を、たとえば、フレーム・ヘッダまたはスライス・ヘッダの一部として送信することができる。以下でより詳細に説明するように、コード化ユニットのシンタックス情報は、コード化ユニット中で使用されるマクロ・ブロックの最大サイズを示す最大サイズインジケータを備えることができる。このようにして、エンコーダは、コード化ユニットのマクロ・ブロックについてどんなシンタックスを予想すべきかに関してデコーダに通知することができる。マクロ・ブロックの最大サイズが16×16ピクセルを備えるとき、デコーダは、標準のH.264シンタックスを予想し、H.264指定のシンタックスに従ってマクロ・ブロックをパースすることができる。しかしながら、マクロ・ブロックの最大サイズが16×16よりも大きいとき、たとえば、64×64ピクセルを備えるとき、デコーダは、本開示で説明するように、より大きいマクロ・ブロックの処理に関係する修正および/または追加のシンタックス要素を予想し、そのような修正または追加のシンタックスに従ってマクロ・ブロックをパースすることができる。
【0051】
一部のビデオ・フレームまたはスライスについては、ひずみが比較的小さければ、大型マクロ・ブロックがかなりのビット・レートの節約を提示し、それによって最良のレートひずみ結果を生じることがある。しかしながら、他のビデオ・フレームまたはスライスについては、より小さいマクロ・ブロックが、レートひずみコスト分析においてビット・レートを上回るより少ないひずみを提示することがある。したがって、様々な場合において、たとえば、ビデオのコンテンツおよび複雑さに応じて、様々なビデオ・フレームまたはスライスに対して64×64、32×32または16×16が適切であり得る。
【0052】
図1は、大型マクロ・ブロック、すなわち、16×16マクロ・ブロックよりも多くのピクセルを含んでいるマクロ・ブロックを使用してデジタル・ビデオ・データを符号化/復号するための技法を利用することができる例示的なビデオ符号化および復号システム10を示すブロック図である。図1に示すように、システム10は、通信チャネル16を介して符号化ビデオを宛先デバイス14に送信するソース・デバイス12を含む。ソース・デバイス12および宛先デバイス14は、広範囲のデバイスのいずれかを備えることができる。場合によっては、ソース・デバイス12および宛先デバイス14は、いわゆるセルラー電話または衛星無線電話のワイヤレス・ハンドセットなどのワイヤレス通信デバイス、または通信チャネル16を介してビデオ情報を通信することができ、その場合、通信チャネル16がワイヤレスである任意のワイヤレスデバイスを備えることができる。ただし、従来のビデオ符号化規格によって規定されたマクロ・ブロックよりも多くのピクセルを備える大型マクロ・ブロックの使用に関係する本開示の技法は、必ずしもワイヤレス適用例または設定に限定されるわけではない。たとえば、これらの技法は、無線テレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、インターネットビデオ送信、記憶媒体上に符号化される符号化デジタル・ビデオ、または他のシナリオに適用することができる。したがって、通信チャネル16は、符号化ビデオ・データの送信に好適なワイヤレスまたはワイヤード媒体の任意の組合せを備えることができる。
【0053】
図1の例では、ソース・デバイス12は、ビデオ・ソース18と、ビデオ・エンコーダ20と、変調器/復調器(モデム)22と、送信機24とを含むことができる。宛先デバイス14は、受信機26と、モデム28と、ビデオ・デコーダ30と、ディスプレイ・デバイス32とを含むことができる。本開示によれば、ソース・デバイス12のビデオ・エンコーダ20は、ビデオ符号化プロセスにおいて、従来のビデオ符号化規格によって規定されたマクロ・ブロック・サイズよりも大きいサイズを有する大型マクロ・ブロックを使用するための技法のうちの1つまたは複数を適用するように構成できる。同様に、宛先デバイス14のビデオ・デコーダ30は、ビデオ復号プロセスにおいて、従来のビデオ符号化規格によって規定されたマクロ・ブロック・サイズよりも大きいマクロ・ブロック・サイズを使用するための技法のうちの1つまたは複数を適用するように構成できる。
【0054】
図1の図示のシステム10は一例にすぎない。本開示で説明する大型マクロ・ブロックを使用するための技法は、任意のデジタル・ビデオ符号化および/または復号デバイスによって実行できる。ソース・デバイス12および宛先デバイス14は、ソース・デバイス12が宛先デバイス14に送信するためのコード化ビデオ・データを生成するような、コーディングデバイスの例にすぎない。いくつかの例では、デバイス12、14の各々がビデオ符号化構成要素および復号構成要素を含むので、デバイス12、14は、実質的に対称的に動作することができる。したがって、システム10は、たとえば、ビデオ・ストリーミング、ビデオ再生、ビデオ・ブロードキャスト、またはビデオ・テレフォニーのためのビデオ・デバイス12とビデオ・デバイス14との間の一方向または双方向のビデオ送信をサポートすることができる。
【0055】
ソース・デバイス12のビデオ・ソース18は、ビデオ・カメラなどのビデオ・キャプチャ・デバイス、あらかじめキャプチャされたビデオを含んでいるビデオアーカイブ、および/またはビデオ・コンテンツプロバイダからのビデオ・フィードを含むことができる。さらなる代替として、ビデオ・ソース18は、ソースビデオとしてのコンピュータグラフィックベースのデータ、またはライブビデオとアーカイブされたビデオとコンピュータ生成ビデオとの組合せを生成することができる。場合によっては、ビデオ・ソース18がビデオ・カメラである場合、ソース・デバイス12および宛先デバイス14は、いわゆるカメラ付き携帯電話またはビデオ電話を形成することができる。ただし、上述のように、本開示で説明する技法は、一般にビデオ・コーディングに適用可能であり、ワイヤレスまたはワイヤード・アプリケーションに適用できる。各場合において、キャプチャされたビデオ、あらかじめキャプチャされたビデオ、またはコンピュータ生成ビデオをビデオ・エンコーダ20によって符号化することができる。次いで、符号化ビデオ情報は、通信規格に従ってモデム22によって変調され、送信機24を介して宛先デバイス14に送信される。モデム22は、信号変調のために設計された様々なミキサ、フィルタ、増幅器または他の構成要素を含むことができる。送信機24は、増幅器、フィルタ、および1つまたは複数のアンテナを含む、データを送信するために設計された回路を含むことができる。
【0056】
宛先デバイス14の受信機26はチャネル16を介して情報を受信し、モデム28は情報を復調する。この場合も、ビデオ符号化プロセスは、ビデオ・データのインター(すなわち、時間)符号化および/またはイントラ(すなわち、空間)符号化のために、たとえば、16×16よりも大きい大型マクロ・ブロックを使用するための本明細書で説明する技法のうちの1つまたは複数を実装することができる。ビデオ・デコーダ30によって実行されるビデオ復号プロセスはまた、復号プロセス中にそのような技法を使用することができる。チャネル16を介して通信される情報は、以下でより詳細に説明するように、ビデオ・エンコーダ20によって定義され、またビデオ・デコーダ30によって使用される、大型マクロ・ブロックの特性および/または処理を記述するシンタックス要素を含むシンタックス情報を含むことができる。シンタックス情報は、フレーム・ヘッダ、スライス・ヘッダ、シーケンス・ヘッダ(たとえば、H.264に関して、コード化ビデオ・シーケンスが準拠するプロファイルおよびレベルを使用することによって)、またはマクロ・ブロック・ヘッダのいずれかまたはすべての中に含めることができる。ディスプレイ・デバイス32は、復号されたビデオ・データをユーザに対して表示し、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマ・ディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイ・デバイスなど、様々なディスプレイ・デバイスのいずれかを備えることができる。
【0057】
図1の例では、通信チャネル16は、無線周波数(RF)スペクトルまたは1つまたは複数の物理伝送線路など、ワイヤレスまたはワイヤードの任意の通信媒体、あるいはワイヤレスおよびワイヤード媒体の任意の組合せを備えることができる。通信チャネル16は、ローカルエリア・ネットワーク、ワイドエリア・ネットワーク、またはインターネットなどのグローバル・ネットワークなど、パケット・ベースのネットワークの一部を形成することができる。通信チャネル16は、一般に、ワイヤードまたはワイヤレス媒体の任意の好適な組合せを含む、ビデオ・データをソース・デバイス12から宛先デバイス14に送信するのに好適な任意の通信媒体、または様々な通信媒体の集合体を表す。通信チャネル16は、ソース・デバイス12から宛先デバイス14への通信を可能にするのに有用なルータ、スイッチ、基地局、または任意の他の機器を含むことができる。
【0058】
ビデオ・エンコーダ20およびビデオ・デコーダ30は、代替的にMPEG−4、Part10、Advanced Video Coding(AVC)として説明されるITU−T H.264規格などのビデオ圧縮規格に従って動作することができる。ただし、本開示の技法は、いかなる特定のコーディング規格にも限定されない。他の例には、MPEG−2およびITU−T H.263がある。図1には示されていないが、いくつかの態様では、ビデオ・エンコーダ20およびビデオ・デコーダ30は、それぞれオーディオエンコーダおよびデコーダと統合でき、適切なMUX−DEMUXユニット、または他のハードウェアおよびソフトウェアを含み、共通のデータ・ストリームまたは別個のデータ・ストリーム中のオーディオとビデオの両方の符号化を処理することができる。適用可能な場合、MUX−DEMUXユニットはITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠することができる。
【0059】
ITU−T H.264/MPEG−4(AVC)規格は、Joint Video Team(JVT)として知られる共同パートナーシップの成果として、ISO/IEC Moving Picture Experts Group(MPEG)とともにITU−T Video Coding Experts Group(VCEG)によって策定された。いくつかの態様では、本開示で説明する技法は、一般にH.264規格に準拠するデバイスに適用できる。H.264規格は、ITU−T Study Groupによる2005年3月付けのITU−T勧告H.264「Advanced Video Coding for generic audiovisual services」に記載されており、本明細書ではH.264規格またはH.264仕様、あるいはH.264/AVC規格または仕様と呼ぶ。Joint Video Team(JVT)はH.264/MPEG−4 AVCへの拡張の取り組みを続けている。
【0060】
ビデオ・エンコーダ20およびビデオ・デコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアなどの様々な好適なエンコーダ回路のいずれか、またはそれらの任意の組合せとして実装できる。ビデオ・エンコーダ20およびビデオ・デコーダ30の各々を1つまたは複数のエンコーダまたはデコーダ中に含めることができ、そのいずれかは複合エンコーダ/デコーダ(コーデック)の一部としてそれぞれのカメラ、コンピュータ、モバイルデバイス、加入者デバイス、ブロードキャスト・デバイス、セット・トップボックス、サーバなどに統合できる。
【0061】
ビデオ・シーケンスは、一般に一連のビデオ・フレームを含む。ビデオ・エンコーダ20は、ビデオ・データを符号化するために、個々のビデオ・フレーム内のビデオ・ブロックに対して動作する。ビデオ・ブロックは、マクロ・ブロックまたはマクロ・ブロックのパーティションに対応することがある。ビデオ・ブロックは、さらに、パーティションのパーティションに対応することがある。ビデオ・ブロックは、サイズを固定することも変更することもでき、指定の符号化規格または本開示の技法に応じてサイズが異なることがある。各ビデオ・フレームは複数のスライスを含むことができる。各スライスは複数のマクロ・ブロックを含むことができ、それらはサブブロックとも呼ばれるパーティションに配置され得る。
【0062】
一例として、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、およびクロマ成分については対応するスケーリングされたサイズなど、様々なブロック・サイズのインター予測をサポートする。本開示では、「×(x)」と「×(by)」は、垂直寸法および水平寸法に関するブロックのピクセル寸法、たとえば、16×(x)16ピクセルまたは16×(by)16ピクセルを指すために互換的に使用され得る。一般に、16×16ブロックは、垂直方向に16ピクセルを有し、水平方向に16ピクセルを有する。同様に、N×Nブロックは、一般に、垂直方向にNピクセルを有し、水平方向にNピクセルを有し、Nは、16よりも大きいことがある正の整数値を表す。ブロック中のピクセルは行と列に配置され得る。
【0063】
16×16よりも小さいブロック・サイズは16×16マクロ・ブロックのパーティションと呼ばれることがある。同様に、N×Nブロックについては、N×Nよりも小さいブロック・サイズはN×Nブロックのパーティションと呼ばれることがある。本開示の技法は、32×32ピクセル・マクロ・ブロック、64×64ピクセル・マクロ・ブロック、またはより大きいマクロ・ブロックなど、従来の16×16ピクセル・マクロ・ブロックよりも大きいマクロ・ブロックのためのイントラ・コーディングおよびインター・コーディングについて説明する。ビデオ・ブロックは、ピクセル領域中のピクセル・データのブロックを備えることができ、あるいは、たとえば、コード化ビデオ・ブロックと予測ビデオ・ブロックとのピクセル差分を表す残差ビデオ・ブロックデータへの離散コサイン変換(DCT)、整数変換、ウェーブ・レット変換、または概念的に同様の変換などの変換の適用後、変換領域中の変換係数のブロックを備えることができる。場合によっては、ビデオ・ブロックは、変換領域中の量子化変換係数のブロックを備えることができる。
【0064】
より小さいビデオ・ブロックは、より良好な解像度を与えることができ、高い詳細レベルを含むビデオ・フレームのロケーションに対して使用できる。一般に、マクロ・ブロックおよび様々なパーティションはサブブロックと呼ばれることがあり、ビデオ・ブロックであると見なされ得る。さらに、スライスは、マクロ・ブロックおよび/またはサブブロックなどの複数のビデオ・ブロックであると見なされ得る。各スライスはビデオ・フレームの単独で復号可能なユニットとすることができる。代替的に、フレーム自体を復号可能なユニットとすることができるか、またはフレームの他の部分を復号可能なユニットとして定義することができる。「コード化ユニット」または「コーディング・ユニット」という用語は、フレーム全体、フレームのスライス、シーケンスとも呼ばれるピクチャ・グループ(GOP)など、ビデオ・フレームの単独で復号可能な任意のユニット、または適用可能なコーディング技法に従って定義される別の単独で復号可能なユニットを指すことができる。
【0065】
予測データと残差データとを生成するためのイントラ予測コーディングまたはインター予測コーディングの後、および変換係数を生成するための(H.264/AVCで使用される4×4または8×8整数変換、あるいは離散コサイン変換DCTなどの)任意の変換の後、変換係数の量子化を実行することができる。量子化は、一般に、係数を表すために使用されるデータ量をできるだけ低減するために変換係数を量子化するプロセスを指す。量子化プロセスは、係数の一部または全部に関連するビット深度を低減することができる。たとえば、量子化中にnビット値をmビット値に切り捨てることができ、nはmよりも大きい。
【0066】
量子化の後、コンテンツ適応型可変長コーディング(CAVLC)、コンテキスト適応型バイナリ算術コーディング(CABAC)、または別のエントロピー・コーディング方法に従って量子化データのエントロピー・コーディングを実行することができる。エントロピー・コーディング用に構成された処理ユニットまたは別の処理ユニットは、量子化係数のゼロランレングス・コーディング、および/またはCBP値、マクロ・ブロック・タイプ、コーディング・モード、(フレーム、スライス、マクロ・ブロック、またはシーケンスなどの)コード化ユニットの最大マクロ・ブロック・サイズなどのシンタックス情報の生成など、他の処理機能を実行することができる。
【0067】
本開示の様々な技法によれば、ビデオ・エンコーダ20は、従来のビデオ符号化規格によって規定されたマクロ・ブロックよりも大きいマクロ・ブロックを使用して、デジタル・ビデオ・データを符号化することができる。一例では、ビデオ・エンコーダ20は、ビデオ・エンコーダを用いて、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを符号化し、ブロックのサイズを示すブロック・タイプ・シンタックス情報を生成し、符号化ブロックのコード化ブロック・パターン値を生成し、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す。マクロ・ブロック・タイプ・シンタックス情報は、大型マクロ・ブロックのマクロ・ブロック・ヘッダ中で与えられ得る。マクロ・ブロックのブロック・タイプ・シンタックス情報は、フレームまたはスライス中のマクロ・ブロックのアドレスまたは位置、あるいはマクロ・ブロックの位置を識別するマクロ・ブロック番号、マクロ・ブロックに適用されるコーディング・モードのタイプ・マクロ・ブロックの量子化値、マクロ・ブロックの動きベクトル情報、およびマクロ・ブロックのCBP値を示すことができる。
【0068】
別の例では、ビデオ・エンコーダ20は、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信し、そのブロックをパーティションに区分し、第1の符号化モードを使用してパーティションのうちの1つを符号化し、第1の符号化モードとは異なる第2の符号化モードを使用してパーティションのうちの別の1つを符号化し、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を生成する。
【0069】
追加の例では、ビデオ・エンコーダ20は、フレームまたはスライスなどのビデオ・コーディング・ユニットを受信し、16×16ピクセルのサイズをもつ第1のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化するための第1のレートひずみメトリックを判断し、16×16ピクセルよりも大きいサイズをもつ第2のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化するための第2のレートひずみメトリックを判断し、第1のレートひずみメトリックが第2のレートひずみメトリックよりも小さいとき、第1のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化し、第2のレートひずみメトリックが第1のレートひずみメトリックよりも小さいとき、第2のビデオ・ブロックを使用してビデオ・コーディング・ユニットを符号化する。
【0070】
一例では、ビデオ・デコーダ30は、16×16ピクセルよりも大きいサイズを有する符号化ビデオ・ブロックを受信することと、符号化ブロックのサイズを示すブロック・タイプ・シンタックス情報を受信することと、符号化ブロックのコード化ブロック・パターン値を受信することであって、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す、受信することと、ブロック・タイプ・シンタックス情報と符号化ブロックのコード化ブロック・パターン値とに基づいて符号化ブロックを復号することとを行う。
【0071】
別の例では、ビデオ・デコーダ30は、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信することであって、そのブロックがパーティションに区分され、パーティションのうちの1つがイントラ符号化され、パーティションのうちの別の1つがイントラ符号化される、受信することと、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を受信することと、ブロック・タイプ・シンタックス情報に基づいてビデオ・ブロックを復号することとを行う。
【0072】
図2は、本開示に一致する大型マクロ・ブロックを使用するための技法を実装することができるビデオ・エンコーダ50の一例を示すブロック図である。ビデオ・エンコーダ50は、ソース・デバイス12のビデオ・エンコーダ20、または異なるデバイスのビデオ・エンコーダに対応することがある。ビデオ・エンコーダ50は、大型マクロ・ブロックあるいは大型マクロ・ブロックのパーティションまたはサブパーティションを含むビデオ・フレーム内のブロックのイントラ・コーディングおよびインター・コーディングを実行することができる。イントラ・コーディングは空間的予測を利用して、所与のビデオ・フレーム内のビデオの空間的冗長性を低減または除去する。インター・コーディングは時間的予測を利用して、ビデオ・シーケンスの隣接フレーム内のビデオの時間的冗長性を低減または除去する。
【0073】
イントラ・モード(Iモード)は、いくつかの空間ベースの圧縮モードのいずれかを指し、予測(Pモード)または双方向(Bモード)などのインターモードは、いくつかの時間ベースの圧縮モードのいずれかを指すことができる。本開示の技法は、インター・コーディング中とイントラ・コーディング中の両方に適用できる。場合によっては、本開示の技法はまた、非ビデオデジタル画像を符号化することに適用できる。すなわち、デジタル静止画像エンコーダは、本開示の技法を利用して、ビデオ・シーケンス中のビデオ・フレーム中のイントラ・コード化マクロ・ブロックを符号化するのと同様の方法で、大型マクロ・ブロックを使用してデジタル静止画像をイントラ・コーディングすることができる。
【0074】
図2に示すように、ビデオ・エンコーダ50は、符号化すべきビデオ・フレーム内の現在のビデオ・ブロックを受信する。図2の例では、ビデオ・エンコーダ50は、動き補償ユニット35と、動き推定ユニット36と、イントラ予測ユニット37と、モード選択ユニット39と、参照フレーム・ストア34と、加算器48と、変換ユニット38と、量子化ユニット40と、エントロピー・コーディング・ユニット46とを含む。ビデオ・ブロック再構成のために、ビデオ・エンコーダ50はまた、逆量子化ユニット42と、逆変換ユニット44と、加算器51とを含む。再構成されたビデオからブロッキネス・アーティファクトを除去するためにブロック境界をフィルタ処理するデブロッキング・フィルタ(図2に図示せず)を含めることもできる。所望される場合、デブロッキング・フィルタは、一般に、加算器51の出力をフィルタ処理するであろう。
【0075】
符号化プロセス中に、ビデオ・エンコーダ50はコーディングすべきビデオ・フレームまたはスライスを受信する。フレームまたはスライスは、大型マクロ・ブロックを含む複数のビデオ・ブロックに分割できる。動き推定ユニット36および動き補償ユニット35は、時間圧縮を行うために、1つまたは複数の参照フレーム中の1つまたは複数のブロックに対する受信したビデオ・ブロックのインター予測コーディングを実行する。イントラ予測ユニット37は、空間圧縮を行うために、コーディングすべきブロックと同じフレームまたはスライス中の1つまたは複数の近傍ブロックに対する受信したビデオ・ブロックのイントラ予測コーディングを実行する。
【0076】
モード選択ユニット39は、たとえば、誤り結果に基づいてコーディング・モード、すなわち、イントラまたはインターのうちの1つを選択し、残差ブロックデータを生成するために、得られたイントラ・コード化ブロックまたはインター・コード化ブロックを加算器48に供給し、参照フレームとして使用するための符号化ブロックを再構成するために、得られたイントラ・コード化ブロックまたはインター・コード化ブロックを加算器51に供給することができる。本開示の技法によれば、コーディングすべきビデオ・ブロックは、従来のコーディング規格によって規定されたマクロ・ブロックよりも大きい、すなわち、16×16ピクセル・マクロ・ブロックよりも大きいマクロ・ブロックを備えることができる。たとえば、大型ビデオ・ブロックは64×64ピクセル・マクロ・ブロックまたは32×32ピクセル・マクロ・ブロックを備えることができる。
【0077】
動き推定ユニット36と動き補償ユニット35は、高度に統合できるが、概念的な目的のために別々に示されている。動き推定は、ビデオ・ブロックの動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、現在のフレーム(または、他のコード化ユニット)内のコーディングされている現在のブロックに対する予測参照フレーム(または、他のコード化ユニット)内の予測ブロックの変位を示すことができる。予測ブロックは、絶対値差分和(SAD)、差分2乗和(SSD)、または他の差分メトリックによって判断できるピクセル差分に関して、コーディングすべきブロックにぴったり一致することがわかるブロックである。
【0078】
動きベクトルはまた、大型マクロ・ブロックのパーティションの変位を示すことができる。1つの32×64パーティションと2つの32×32パーティションをもつ64×64ピクセル・マクロ・ブロックに関する一例では、すべて参照フレーム中の対応するパーティションに対して、第1の動きベクトルは、32×64パーティションの変位を示すことができ、第2の動きベクトルは、32×32パーティションのうちの第1のパーティションの変位を示すことができ、第3の動きベクトルは、32×32パーティションのうちの第2のパーティションの変位を示すことができる。そのようなパーティションはまた、本開示でそれらの用語が使用されるようにビデオ・ブロックと見なされ得る。動き補償は、動き推定によって決定された動きベクトルに基づいて予測ブロックをフェッチまたは生成することに関与することができる。この場合も、動き推定ユニット36と動き補償ユニット35は機能的に統合できる。
【0079】
動き推定ユニット36は、ビデオ・ブロックを参照フレーム・ストア34中の参照フレームのビデオ・ブロックと比較することによってインター・コード化フレームのビデオ・ブロックの動きベクトルを計算する。動き補償ユニット35はまた、参照フレーム、たとえば、IフレームまたはPフレームのサブ整数ピクセルを補間することができる。ITU H.264規格では、参照フレームを「リスト」と呼ぶ。したがって、参照フレーム・ストア34に記憶されたデータをリストと見なすこともできる。動き推定ユニット36は、参照フレーム・ストア34からの1つまたは複数の参照フレーム(またはリスト)のブロックを現在のフレーム、たとえば、PフレームまたはBフレームの符号化すべきブロックと比較する。参照フレーム・ストア34中の参照フレームがサブ整数ピクセルの値を含むとき、動き推定ユニット36によって計算される動きベクトルは参照フレームのサブ整数ピクセルロケーションを参照することができる。動き推定ユニット36は、計算された動きベクトルをエントロピー・コーディング・ユニット46および動き補償ユニット35に送信する。動きベクトルによって識別される参照フレーム・ブロックは予測ブロックと呼ばれることがある。動き補償ユニット35は参照フレームの予測ブロックの誤差値を計算する。
【0080】
動き補償ユニット35は、予測ブロックに基づいて予測データを計算することができる。ビデオ・エンコーダ50は、コーディングされている元のビデオ・ブロックから、動き補償ユニット35からの予測データを減算することによって残差ビデオ・ブロックを形成する。加算器48は、この減算演算を実行する1つまたは複数の構成要素を表す。変換ユニット38は、離散コサイン変換(DCT)または概念的に同様の変換などの変換を残差ブロックに適用し、残差変換係数値を備えるビデオ・ブロックを生成する。変換ユニット38は、概念的にDCTと同様である、H.264規格によって定義される変換などの他の変換を実行することができる。ウェーブ・レット変換、整数変換、サブバンド変換または他のタイプの変換をも使用することができる。いずれの場合も、変換ユニット38は、変換を残差ブロックに適用し、残差変換係数のブロックを生成する。変換は、残差情報をピクセル値領域から周波数領域などの変換領域に変換することができる。
【0081】
量子化ユニット40は、ビット・レートをさらに低減するために残差変換係数を量子化する。量子化プロセスは、係数の一部または全部に関連するビット深度を低減することができる。一例では、量子化ユニット40は、本開示ではQPYと呼ぶ輝度量子化パラメータに従って各64×64ピクセル・マクロ・ブロックについて異なる程度の量子化を確定することができる。量子化ユニット40は、さらに、本明細書では「MB64_delta_QP」と呼ぶ量子化パラメータモディファイアと前に符号化された64×64ピクセル・マクロ・ブロックとに基づいて、64×64マクロ・ブロックの量子化中に使用される輝度量子化パラメータを変更することができる。
【0082】
各64×64ピクセル大型マクロ・ブロックは、両端値を含む−26と+25との間の範囲の個々のMB64_delta_QP値を備えることができる。一般に、ビデオ・エンコーダ50は、ブロックの符号化バージョンを送信するための所望のビット・レートに基づいて特定のブロックのMB64_delta_QP値を確定することができる。第1の64×64ピクセル・マクロ・ブロックのMB64_delta_QP値は、たとえば、フレーム/スライス・ヘッダ中の、第1の64×64ピクセル・マクロ・ブロックを含むフレームまたはスライスのQP値に等しいとすることができる。現在の64×64ピクセル・マクロ・ブロックのQPYを次式に従って計算することができる。
【数1】

【0083】
上式で、QPY,PREVは、現在のスライス/フレームの復号順序における前の64×64ピクセル・マクロ・ブロックのQPY値を指し、「%」は、N%52が、52で除算されたNの剰余値に対応する、両端値を含む0と51との間の結果を戻すようなモジュロ演算子を指す。フレーム/スライス中の第1のマクロ・ブロックについて、QPY,PREVをフレーム/スライス・ヘッダ中で送信されたフレーム/スライスQPに等しくセットすることができる。
【0084】
一例では、量子化ユニット40は、P_SkipおよびB_Skipマクロ・ブロック・タイプなどの「スキップ」タイプ・マクロ・ブロックを含む特定の64×64ピクセル・マクロ・ブロックについてMB64_delta_QP値が定義されないとき、MB64_delta_QP値は0に等しいと推定する。いくつかの例では、64×64ピクセル・マクロ・ブロック内のパーティションのより粒度の細かい量子化制御のために、64×64ピクセル・マクロ・ブロックの各32×32ピクセル・パーティションのMB32_delta_QP値など、(一般に、量子化パラメータ修正値と呼ばれる)追加のdelta_QP値を定義することができる。いくつかの例では、64×64マクロ・ブロックの各パーティションに個々の量子化パラメータを割り当てることができる。パーティションごとに個別化された量子化パラメータを使用することにより、マクロ・ブロックをより効率的に量子化し、たとえば、64×64マクロ・ブロックに対して単一のQPを使用する代わりに、不均質なエリアについて量子化をより良く調整することができる。各量子化パラメータ修正値は、対応する符号化ブロックとともにシンタックス情報として含めることができ、デコーダは、量子化パラメータ修正値に従って逆量子化(dequantizing)、すなわち逆量子化(inverse quantizing)することによって符号化ブロックを復号することができる。
【0085】
量子化の後、エントロピー・コーディング・ユニット46が量子化変換係数をエントロピー・コーディングする。たとえば、エントロピー・コーディング・ユニット46は、コンテンツ適応型可変長コーディング(CAVLC)、コンテキスト適応型バイナリ算術コーディング(CABAC)、または別のエントロピー・コーディング技法を実行することができる。エントロピー・コーディング・ユニット46によるエントロピー・コーディングの後、符号化ビデオを、別のデバイスに送信するか、あるいは後で送信または検索するためにアーカイブすることができる。コード化ビット・ストリームは、以下でより詳細に説明するように、エントロピーコード化残差変換係数ブロックと、そのようなブロックの動きベクトルと、各64×64ピクセル・マクロ・ブロックのMB64_delta_QP値と、たとえば、マクロ・ブロック・タイプ識別子値と、コード化ユニット中のマクロ・ブロックの最大サイズを示すコード化ユニットヘッダと、QPY値と、コード化ブロック・パターン(CBP)値と、マクロ・ブロックまたはサブブロックの区分方法を識別する値と、変換サイズ・フラグ値とを含む他のシンタックス要素とを含むことができる。コンテキスト適応型バイナリ算術コーディングの場合、コンテキストは近傍マクロ・ブロックに基づくことができる。
【0086】
場合によっては、エントロピー・コーディング・ユニット46またはビデオ・エンコーダ50の別のユニットは、エントロピー・コーディングに加えて他のコーディング機能を実行するように構成できる。たとえば、エントロピー・コーディング・ユニット46は大型マクロ・ブロックおよびパーティションのCBP値を判断するように構成できる。エントロピー・コーディング・ユニット46は、マクロ・ブロック中のパーティションのいずれかが非0変換係数値を含むかどうかを示す大型マクロ・ブロックのCBP値を与え、そうであれば、大型マクロ・ブロック内の特定のパーティションが非0変換係数値を有するかどうかを示す他のCBP値を与えるための階層CBP方式を適用することができる。また、場合によっては、エントロピー・コーディング・ユニット46は、大型マクロ・ブロックまたはサブパーティション中の係数のランレングス・コーディングを実行することができる。特に、エントロピー・コーディング・ユニット46は、マクロ・ブロックまたはパーティション中の変換係数をスキャンするためにジグザグスキャンまたは他のスキャンパターンを適用し、さらなる圧縮のためにゼロのランを符号化することができる。エントロピー・コーディング・ユニット46はまた、符号化ビデオビット・ストリーム中での送信のために適切なシンタックス要素とともにヘッダ情報を構成することができる。
【0087】
逆量子化ユニット42および逆変換ユニット44は、それぞれ逆量子化および逆変換を適用して、たとえば参照ブロックとして後で使用するために、ピクセル領域において残差ブロックを再構成する。動き補償ユニット35は、残差ブロックを参照フレーム・ストア34のフレームのうちの1つの予測ブロックに加算することによって参照ブロックを計算することができる。動き補償ユニット35はまた、再構成された残差ブロックに1つまたは複数の補間フィルタを適用して、サブ整数ピクセル値を計算することができる。加算器51は、再構成された残差ブロックを動き補償ユニット35によって生成された動き補償予測ブロックに加算して、参照フレーム・ストア34に記憶するための再構成されたビデオ・ブロックを生成する。再構成されたビデオ・ブロックは、後続のビデオ・フレーム中のブロックをインター・コーディングするために動き推定ユニット36および動き補償ユニット35によって参照ブロックとして使用され得る。大型マクロ・ブロックは、64×64ピクセル・マクロ・ブロック、32×32ピクセル・マクロ・ブロック、または従来のビデオ・コーディング規格によって規定されたサイズよりも大きい他のマクロ・ブロックを備えることができる。
【0088】
図3は、本開示で説明する方法で符号化されたビデオ・シーケンスを復号するビデオ・デコーダ60の一例を示すブロック図である。符号化ビデオ・シーケンスは、従来のビデオ符号化規格によって規定されたサイズよりも大きい符号化マクロ・ブロックを含むことができる。たとえば、符号化マクロ・ブロックは32×32ピクセルまたは64×64ピクセル・マクロ・ブロックとすることができる。図3の例では、ビデオ・デコーダ60は、エントロピー復号ユニット52と、動き補償ユニット54と、イントラ予測ユニット55と、逆量子化ユニット56と、逆変換ユニット58と、参照フレーム・ストア62と、加算器64とを含む。ビデオ・デコーダ60は、いくつかの例では、ビデオ・エンコーダ50(図2)に関して説明した符号化パスとは概して逆の復号パスを実行することができる。動き補償ユニット54は、エントロピー復号ユニット52から受信した動きベクトルに基づいて予測データを生成することができる。
【0089】
エントロピー復号ユニット52は、受信したビット・ストリームをエントロピー復号して、量子化係数およびシンタックス要素(たとえば、動きベクトル、CBP値、QPY値、変換サイズ・フラグ値、MB64_delta_QP値)を生成する。エントロピー復号ユニット52は、フレーム、スライスおよび/またはマクロ・ブロック・ヘッダなどのコード化ユニット中のシンタックス情報を識別するために、ビット・ストリームをパースすることができる。複数のマクロ・ブロックを備えるコード化ユニットのシンタックス情報は、マクロ・ブロックの最大サイズ、たとえば、16×16ピクセル、32×32ピクセル、64×64ピクセル、またはコード化ユニット中の他のより大きいサイズのマクロ・ブロックを示すことができる。ブロックのシンタックス情報は、エントロピー・コーディング・ユニット52から、たとえば、そのブロックのコーディング・モードに応じて動き補償ユニット54またはイントラ予測ユニット55にフォワーディングされる。デコーダは、コード化ユニットのシンタックス中の最大サイズインジケータを使用して、コード化ユニットのためのシンタックス・デコーダを選択することができる。最大サイズに対して指定されたシンタックス・デコーダを使用して、デコーダは、次いで、コード化ユニット中に含まれる大型マクロ・ブロックを適切に解釈し、処理することができる。
【0090】
動き補償ユニット54は、ビット・ストリーム中で受信された動きベクトルを使用して、参照フレーム・ストア62中の参照フレーム中の予測ブロックを識別することができる。イントラ予測ユニット55は、ビット・ストリーム中で受信されたイントラ予測モードを使用して、空間的に隣接するブロックから予測ブロックを形成することができる。逆量子化ユニット56は、ビット・ストリーム中で供給され、エントロピー復号ユニット52によって復号された量子化ブロック係数を逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)する。逆量子化プロセスは、たとえば、H.264復号規格によって定義された従来のプロセスを含むことができる。逆量子化プロセスはまた、量子化の程度を判断し、同様に、適用すべき逆量子化の程度を判断するための、各64×64マクロ・ブロックについてエンコーダ50によって計算される量子化パラメータQPYの使用を含むことができる。
【0091】
逆変換ユニット58は、逆変換、たとえば逆DCT、逆整数変換、または概念的に同様の逆変換プロセスを変換係数に適用して、ピクセル領域において残差ブロックを生成する。動き補償ユニット54は動き補償ブロックを生成し、場合によっては、補間フィルタに基づいて補間を実行する。サブピクセル精度をもつ動き推定に使用すべき補間フィルタの識別子をシンタックス要素中に含めることができる。動き補償ユニット54は、ビデオ・ブロックの符号化中にビデオ・エンコーダ50によって使用される補間フィルタを使用して、参照ブロックのサブ整数ピクセルの補間値を計算することができる。動き補償ユニット54は、受信したシンタックス情報に従って、ビデオ・エンコーダ50によって使用された補間フィルタを判断し、その補間フィルタを使用して予測ブロックを生成することができる。
【0092】
動き補償ユニット54は、シンタックス情報のいくつかを使用して、符号化ビデオ・シーケンスの(1つまたは複数の)フレームを符号化するために使用されるマクロ・ブロックのサイズと、符号化ビデオ・シーケンスのフレームの各マクロ・ブロックがどのように区分されるかを記述するパーティション情報と、各パーティションがどのように符号化されるかを示すモードと、各インター符号化マクロ・ブロックまたはパーティションのための1つまたは複数の参照フレーム(またはリスト)と、符号化ビデオ・シーケンスを復号するための他の情報とを判断する。
【0093】
加算器64は、残差ブロックを、動き補償ユニット54またはイントラ予測ユニットによって生成される対応する予測ブロックと合計して、復号されたブロックを形成する。所望される場合、ブロッキネス・アーティファクトを除去するために、デブロッキング・フィルタを適用して、復号されたブロックをフィルタ処理することもできる。復号されたビデオ・ブロックは、次いで、参照フレーム・ストア62に記憶され、参照フレーム・ストア62は、参照ブロックをその後の動き補償に供給し、また、ディスプレイ・デバイス(図1のデバイス32など)上での提示のために復号されたビデオを生成する。復号されたビデオ・ブロックはそれぞれ、64×64ピクセル・マクロ・ブロック、32×32ピクセル・マクロ・ブロック、または規格よりも大きい他のマクロ・ブロックを備えることができる。いくつかのマクロ・ブロックは、多種多様なパーティション・サイズをもつパーティションを含むことができる。
【0094】
図4Aは、大型マクロ・ブロックの様々なパーティション・レベルの中の例示的な区分を示す概念図である。各パーティション・レベルのブロックは、特定のレベルに対応するいくつかのピクセルを含む。また、レベルごとに4つの区分パターンが示され、第1のパーティション・パターンはブロック全体を含み、第2のパーティション・パターンは等しいサイズの2つの水平パーティションを含み、第3のパーティション・パターンは等しいサイズの2つの垂直パーティションを含み、第4のパーティション・パターンは等しいサイズの4つのパーティションを含む。各パーティション・レベルにおいてパーティションごとに区分パターンのうちの1つを選択することができる。
【0095】
図4Aの例では、レベル0は、ルーマ・サンプルおよび関連するクロマ・サンプルの64×64ピクセル・マクロ・ブロックパーティションに対応する。レベル1は、ルーマ・サンプルおよび関連するクロマ・サンプルの32×32ピクセルブロックに対応する。レベル2はルーマ・サンプルおよび関連するクロマ・サンプルの16×16ピクセルブロックに対応し、レベル3はルーマ・サンプルおよび関連するクロマ・サンプルの8×8ピクセルブロックに対応する。
【0096】
他の例では、より多数のまたはより少数のピクセルを利用するために追加のレベルを導入することができる。たとえば、レベル0は、128×128ピクセル・マクロ・ブロック、256×256ピクセル・マクロ・ブロック、または他のより大きいサイズのマクロ・ブロックで開始することができる。最も大きい番号のレベルは、いくつかの例では、単一のピクセル、すなわち、1×1ブロックと同程度に細かい粒度とすることができる。したがって、マクロ・ブロックを区分し、パーティションをさらに区分し、さらなるパーティションをまたさらに区分するなどのように、最低レベルから最高レベルまで、区分を漸増的に下位区分することができる。いくつかの例では、レベル0より下のパーティション、すなわち、パーティションのパーティションをサブパーティションと呼ぶことがある。
【0097】
あるレベルにおけるブロックを等しいサイズの4つのサブブロックを使用して区分するとき、サブブロックのいずれかまたはすべてを次のレベルのパーティション・パターンに従って区分することができる。すなわち、レベルxにおいて等しいサイズの4つのサブブロック(N/2)×(N/2)に区分されたN×Nブロックについて、(N/2)×(N/2)サブブロックのいずれかをレベルx+1のパーティション・パターンのいずれかに従ってさらに区分することができる。したがって、レベル0における64×64ピクセル・マクロ・ブロックの32×32ピクセルサブブロックを、レベル1において図4Aに示すパターン、たとえば、32×32、32×16および32×16、16×32および16×32、または16×16、16×16、16×16、および16×16のいずれかに従ってさらに区分することができる。同様に、区分されている32×32ピクセルサブブロックから4つの16×16ピクセルサブブロックが生じる場合、16×16ピクセルサブブロックの各々を、レベル2において図4Aに示すパターンのいずれかに従ってさらに区分することができる。区分されている16×16ピクセルサブブロックから4つの8×8ピクセルサブブロックが生じる場合、8×8ピクセルサブブロックの各々を、レベル3において図4Aに示すパターンのいずれかに従ってさらに区分することができる。
【0098】
図4Aに示すパーティションの例示的な4つのレベルを使用して、本開示のフレームワークおよび技法を実装するエンコーダによって大きい均質なエリアおよび細かい散発的変化を適応的に表すことができる。たとえば、ビデオ・エンコーダ50は、様々なマクロ・ブロックの様々な区分レベルを判断すること、ならびに、たとえば、レートひずみ分析に基づいて、そのようなパーティションに適用すべきコーディング・モードを判断することができる。また、以下でより詳細に説明するように、ビデオ・エンコーダ50は、たとえば、レートひずみメトリック結果または他の考慮事項に基づいて、空間的(P符号化またはB符号化)予測または時間的(I符号化)予測を使用して、最終パーティションのうちの少なくともいくつかを別様に符号化することができる。
【0099】
すべてのパーティションが同じイントラ・コーディング・モードまたはインター・コーディング・モードを有するように大型マクロ・ブロックを一様にコーディングする代わりに、いくつかのパーティションが様々なコーディング・モードを有するように大型マクロ・ブロックをコーディングすることができる。たとえば、いくつかの(少なくとも1つの)パーティションを、同じマクロ・ブロック中の他の(少なくとも1つの)パーティションに対して異なるイントラ・コーディング・モード(たとえば、I_16×16、I_8×8、I_4×4)でコーディングすることができる。また、いくつかの(少なくとも1つの)パーティションをイントラ・コーディングし、同じマクロ・ブロック中の他の(少なくとも1つの)パーティションをインター・コーディングすることができる。
【0100】
たとえば、ビデオ・エンコーダ50は、4つの16×16パーティションをもつ32×32ブロックについて、空間的予測を使用して16×16パーティションのうちのいくつかを符号化し、時間的予測を使用して他の16×16パーティションを符号化することができる。別の例として、ビデオ・エンコーダ50は、4つの16×16パーティションをもつ32×32ブロックについて、第1の予測モード(たとえば、I_16×16、I_8×8、I_4×4のうちの1つ)を使用して16×16パーティションの1つまたは複数を符号化し、異なる空間的予測モード(たとえば、I_16×16、I_8×8、I_4×4のうちの1つ)を使用して1つまたは複数の他の16×16パーティションを符号化することができる。
【0101】
図4Bは、大型マクロ・ブロックの様々なパーティションへの様々なコーディング・モードの割当てを示す概念図である。特に、図4Bは、大型32×32マクロ・ブロックの左上の16×16ブロックへのI_16×16イントラ・コーディング・モードの割当て、大型32×32マクロ・ブロックの右上および左下の16×16ブロックへのI_8×8イントラ・コーディング・モードの割当て、および大型32×32マクロ・ブロックの右下の16×16ブロックへのI_4×4イントラ・コーディング・モードの割当てを示す。場合によっては、図4Bに示すコーディング・モードはルーマコーディングのためのH.264イントラ・コーディング・モードとすることができる。
【0102】
説明した方法で、各パーティションを選択的にさらに区分することができ、時間的予測または空間的予測のいずれかを使用し、選択された時間または空間コーディング・モードを使用して、各最終パーティションを選択的にコーディングすることができる。したがって、マクロ・ブロック中の一部のパーティションをイントラ・コーディングし、同じマクロ・ブロック中の他のパーティションをインター・コーディングするか、あるいは同じマクロ・ブロック中の一部のパーティションを様々なイントラ・コーディング・モードまたは様々なインター・コーディング・モードでコーディングするように、大型マクロ・ブロックを混合モードでコーディングすることが可能である。
【0103】
ビデオ・エンコーダ50は、さらに、マクロ・ブロック・タイプに従って各パーティションを定義することができる。マクロ・ブロック・タイプは、符号化ビット・ストリームにシンタックス要素として含めることができ、たとえば、マクロ・ブロック・ヘッダにシンタックス要素として含めることができる。一般に、マクロ・ブロック・タイプを使用して、上記で説明したように、マクロ・ブロックがどのように区分されるか、およびマクロ・ブロックのパーティションの各々を符号化するためのそれぞれの方法またはモードを識別することができる。パーティションを符号化するための方法は、イントラ・コーディングおよびインター・コーディングだけでなく、イントラ・コーディングの特定のモード(たとえば、I_16×16、I_8×8、I_4×4)またはインター・コーディングの特定のモード(たとえば、P_またはB_の16×16、16×8、8×16、8×8、8×4、4×8および4×4)をも含むことができる。
【0104】
Pブロックについては以下の表1の例に関して、およびBブロックについては以下の表2の例に関してより詳細に説明するように、パーティション・レベル0のブロックを、64×64ピクセルをもつマクロ・ブロックを表すMB64_typeシンタックス要素に従って定義することができる。任意のMB[N]_typeについて同様のタイプ定義を形成することができ、[N]は、N×Nピクセルをもつブロックを指し、Nは、16よりも大きいとすることができる正の整数である。N×Nブロックが、図4A上の最後の列に示すようにサイズ(N/2)×(N/2)の4つのパーティションを有するとき、4つのパーティションの各々は、それら自体のタイプ定義、たとえば、MB[N/2]_typeを受信することができる。たとえば、4つの32×32ピクセル・パーティションをもつ(タイプMB64_typeの)64×64ピクセルブロックの場合、ビデオ・エンコーダ50は、4つの32×32ピクセル・パーティションの各々についてMB32_typeを導入することができる。これらのマクロ・ブロック・タイプ・シンタックス要素は、本開示で説明するように、大型マクロ・ブロックおよび大型マクロ・ブロックの様々なパーティションを復号する際にデコーダ60を支援することができる。Nが16よりも大きい各N×Nピクセル・マクロ・ブロックは、一般に、一意のタイプ定義に対応する。したがって、エンコーダは、特定のマクロ・ブロックに適したシンタックスを生成し、フレーム、スライス、またはマクロ・ブロックのシーケンスなどのコード化ユニット中のマクロ・ブロックの最大サイズをデコーダに示すことができる。このようにして、デコーダは、コード化ユニットのマクロ・ブロックに適用すべきシンタックス・デコーダの指示を受信することができる。これはまた、エンコーダが、マクロ・ブロックに適用すべきシンタックス・デコーダのタイプ、たとえば、標準H.264、または本開示の技法による、より大きいマクロ・ブロックの処理のために指定されたシンタックス・デコーダのタイプを示すことができるという点で、デコーダが、H.264などの既存のコーディング規格と後方互換性があることを保証する。
【0105】
一般に、各MB[N]_type定義は、対応するタイプについて、対応するタイプのブロック中のピクセル数(たとえば、64×64)、ブロックのための参照フレーム(または参照リスト)、ブロックのパーティション数、ブロックの各パーティションのサイズ、各パーティションがどのように符号化されるか(たとえば、イントラまたはインターおよび特定のモード)、およびパーティションがインター・コーディングされるときのブロックの各パーティションのための参照フレーム(または参照リスト)を表すことができる。16×16ブロックおよびより小さいブロックについては、ビデオ・エンコーダ50は、いくつかの例では、H.264規格によって指定されたタイプなど、従来のタイプ定義をブロックのタイプとして使用することができる。他の例では、ビデオ・エンコーダ50は、16×16ブロックおよびより小さいブロックに対して新たに定義されたブロック・タイプを適用することができる。
【0106】
ビデオ・エンコーダ50は、ITU H.264によって規定された方法など、通常のマクロ・ブロック・サイズおよびパーティションを使用する従来のインター・コーディング方法またはイントラ・コーディング方法と、本開示で説明する、より大きいマクロ・ブロックおよびパーティションを使用するインター・コーディング方法またはイントラ・コーディング方法との両方を評価し、どの方法が最良のレートひずみパフォーマンスを生じるかを判断するために各手法のレートひずみ特性を比較することができる。ビデオ・エンコーダ50は、次いで、コーディング手法についての最適または許容できるレートひずみ結果に基づいて、インターモードまたはイントラ・モードと、マクロ・ブロック・サイズ(大型、より大型または通常)と、区分とを含む、最良のコーディング手法を選択し、コーディングすべきブロックに適用することができる。一例として、ビデオ・エンコーダ50は、ビデオ・エンコーダが64×64マクロ・ブロック、32×32マクロ・ブロックまたは16×16マクロ・ブロック・サイズを使用するときに生じるレートひずみ結果に基づいて、特定のフレームまたはスライスを符号化するために、そのようなマクロ・ブロックの使用を選択することができる。
【0107】
一般に、大型マクロ・ブロックを使用するイントラ・モードを設計するために、2つの異なる手法を使用することができる。一例として、イントラ・コーディング中に、近傍ブロックに基づいて空間的予測をブロックに対して直接実行することができる。本開示の技法によれば、ビデオ・エンコーダ50は、空間的予測32×32ブロックをそれらの近傍ピクセルに基づいて直接生成し、空間的予測64×64ブロックをそれらの近傍ピクセルに基づいて直接生成することができる。このようにして、16×16イントラブロックに比較してより大きいスケールにおいて空間的予測を実行することができる。したがって、これらの技法により、いくつかの例では、たとえば、フレームまたはスライス当たりより少数のブロックまたはパーティションを用いて、ある程度のビット・レートを節約することができる。
【0108】
別の例として、ビデオ・エンコーダ50は、4つのN×Nブロックを互いにグループ化して(N*2)×(N*2)ブロックを生成し、次いで(N*2)×(N*2)ブロックを符号化することができる。既存のH.264イントラ・コーディング・モードを使用して、ビデオ・エンコーダ50は、4つのイントラ・コード化ブロックを互いにグループ化し、それによって大型イントラ・コード化マクロ・ブロックを形成することができる。たとえば、各々が16×16のサイズを有する4つのイントラ・コード化ブロックを互いにグループ化して、大型の32×32イントラ・コード化ブロックを形成することができる。ビデオ・エンコーダ50は、H.264による異なる符号化モード、たとえば、I_16×16、I_8×8、またはI_4×4を使用して対応する4つのN×Nブロックの各々を符号化することができる。このようにして、たとえば、好都合な符号化結果を促進するために、ビデオ・エンコーダ50によって各16×16ブロックにそれ自体の空間的予測モードを割り当てることができる。
【0109】
ビデオ・エンコーダ50は、上述の2つの異なる方法のいずれかに従ってイントラ・モードを設計し、それらの異なる方法を分析して、どちらの手法がより良好な符号化結果を与えるかを判断することができる。たとえば、ビデオ・エンコーダ50は、それらの異なるイントラ・モード手法を適用し、それらを単一の候補プール中に配置して、それらが最良のレートひずみパフォーマンスのために互いに競合することを可能にすることができる。それらの異なる手法間のレートひずみ比較を使用して、ビデオ・エンコーダ50は、各パーティションおよび/またはマクロ・ブロックをどのように符号化するかを判断することができる。特に、ビデオ・エンコーダ50は、所与のマクロ・ブロックについて最良のレートひずみパフォーマンスを生じるコーディング・モードを選択し、それらのコーディング・モードを適用して、マクロ・ブロックを符号化することができる。
【0110】
図5は、大型マクロ・ブロックの様々なパーティション・レベルの階層図を示す概念図である。図5はまた、図4Aに関して説明した大型マクロ・ブロックの様々なパーティション・レベル間の関係を表す。図5の例で示されるように、パーティション・レベルの各ブロックは、対応するコード化ブロック・パターン(CBP)値を有することができる。CBP値は、ブロックまたはマクロ・ブロックを記述するシンタックス情報の一部を形成する。一例では、CBP値は、それぞれ、変換および量子化演算の後、所与のブロック中に非0変換係数値があるか否かを示す1ビットシンタックス値である。
【0111】
場合によっては、予測ブロックは、残差変換係数のすべてが0に量子化されるように、ピクセル成分がコーディングすべきブロックに極めて近接していることがあり、その場合、コード化ブロックの変換係数を送信する必要はない。代わりに、コード化ブロックが非0係数を含まないことを示すために、ブロックのCBP値を0にセットすることができる。代替的に、ブロックが少なくとも1つの非0係数を含む場合、CBP値を1にセットすることができる。デコーダ60は、CBP値を使用して、コーディングされた、すなわち、1つまたは複数の非0変換係数をもつ残差ブロックと、コーディングされていない、すなわち、非0変換係数を含まないブロックとを識別することができる。
【0112】
本開示で説明する技法のいくつかによれば、エンコーダは、それらのパーティションを含む大型マクロ・ブロックが少なくとも1つの非0係数を有するかどうかに基づいて、それらのマクロ・ブロックにCBP値を階層的に割り当て、どのパーティションが非0係数を有するかを示すためにパーティションにCBP値を割り当てることができる。大型マクロ・ブロックの階層CBPにより、コード化大型マクロ・ブロックと非コード化大型マクロ・ブロックとを迅速に識別するための大型マクロ・ブロックの処理が可能になり、ブロックを復号するために残差データを使用する必要があるかどうかを判断するための、大型マクロ・ブロックの各パーティション・レベルにおけるコード化パーティションの識別が可能になる。
【0113】
一例では、レベル0における64×64ピクセル・マクロ・ブロックは、パーティションを含む64×64ピクセル・マクロ・ブロック全体が非0係数を有するか否かを示すための、CBP64値、たとえば、1ビット値を備えるシンタックス情報を含むことができる。一例では、ビデオ・エンコーダ50は、64×64ピクセル・マクロ・ブロックが少なくとも1つの非0係数を含むことを表すために、CBP64ビットを、たとえば、値「1」に「セット」する。したがって、CBP64値が、たとえば、値「1」にセットされたとき、64×64ピクセル・マクロ・ブロックは、マクロ・ブロック中のどこかに少なくとも1つの非0係数を含む。別の例では、64×64ピクセル・マクロ・ブロックが全0係数を有することを表すために、ビデオ・エンコーダ50は、CBP64値を、たとえば、値「0」に「クリア」する。したがって、CBP64値が、たとえば、値「0」にクリアされたとき、64×64ピクセル・マクロ・ブロックは、全0係数を有するものとして示される。CBP64値「0」をもつマクロ・ブロックは、一般に、ビット・ストリーム中での残差データの送信を必要としないが、CBP64値「1」をもつマクロ・ブロックは、一般に、そのようなマクロ・ブロックを復号する際に使用するために、ビット・ストリーム中での残差データの送信を必要とする。
【0114】
全0係数を有する64×64ピクセル・マクロ・ブロックは、そのパーティションまたはサブブロックのためのCBP値を含む必要はない。すなわち、64×64ピクセル・マクロ・ブロックが全0係数を有するので、パーティションの各々も必然的に全0係数を有する。反対に、少なくとも1つの非0係数を含む64×64ピクセル・マクロ・ブロックは、次のパーティション・レベルにおいてパーティションのCBP値をさらに含むことができる。たとえば、値1をもつCBP64は、64×64ブロックの各32×32パーティションについて1ビット値CBP32の形態の追加のシンタックス情報を含むことができる。すなわち、一例では、64×64ピクセル・マクロ・ブロックの(図5中のレベル1の4つのパーティションなど)各32×32ピクセル・パーティションには、64×64ピクセル・マクロ・ブロックのシンタックス情報の一部としてCBP32値が割り当てられる。CBP64値の場合と同様に、各CBP32値は、対応する32×32ピクセルブロックが少なくとも1つの非0係数を有するときは値1にセットされ、対応する32×32ピクセルブロックが全0係数を有するときは値0にクリアされるビットを備えることができる。エンコーダは、さらに、各マクロ・ブロックのシンタックス情報をどのように解釈すべきか、たとえば、コード化ユニット中のマクロ・ブロックを処理するためにどのシンタックス・デコーダを使用すべきかをデコーダに示すために、フレーム、スライス、またはシーケンスなどの複数のマクロ・ブロックを備えるコード化ユニットのシンタックスにおいて、コード化ユニット中のマクロ・ブロックの最大サイズを示すことができる。
【0115】
このようにして、全0係数を有する64×64ピクセル・マクロ・ブロックは、単一ビットを使用して、マクロ・ブロックが全0係数を有することを表すことができ、少なくとも1つの非0係数をもつ64×64ピクセル・マクロ・ブロックは、64×64ピクセル・マクロ・ブロックが非0係数を有することを表すための第1のビットと、それぞれマクロ・ブロックの4つの32×32ピクセル・パーティションのうちの対応する1つが少なくとも1つの非0係数を含むかどうかを表す4つの追加のビットと、の少なくとも5ビットを備えるCBPシンタックス情報を含むことができる。いくつかの例では、4つの追加のビットのうち最初の3つが0であるとき、第4の追加のビットは含まれないことがあり、デコーダは、これを最後のパーティションが1であると解釈することができる。すなわち、エンコーダは、最初の3ビットが0であり、より高いレベルの階層を表すビットが値1を有するとき、最後のビットが値1を有すると判断することができる。たとえば、CBP64値「10001」のプレフィックスは、第1のビットが、4つのパーティションのうちの少なくとも1つが非0係数を有することを示し、次の3つの0が、最初の3つのパーティションが全0係数を有することを示すので、「1000」に短縮され得る。したがって、デコーダは、非0係数を含むパーティションが最後のパーティションであることをデコーダに通知する明示的ビットなしに、たとえば、ビットストリング「1000」からこのことを推論することができる。すなわち、デコーダは、CBP64プレフィックス「1000」を「10001」として解釈することができる。
【0116】
同様に、1ビットCBP32を、32×32ピクセル・パーティションが少なくとも1つの非0係数を含むときは値「1」にセットし、係数のすべてが値0を有するときは値「0」にセットすることができる。32×32ピクセル・パーティションがCBP値1を有する場合、次のパーティション・レベルにおけるその32×32パーティションのパーティションに、それぞれのパーティションが非0係数を含むかどうかを示すためのCBP値を割り当てることができる。したがって、さらなるパーティション・レベルがなくなるか、または非0係数を含むパーティションがなくなるまで、各パーティション・レベルにおいてCBP値を階層様式で割り当てることができる。
【0117】
上記のように、エンコーダおよび/またはデコーダは、大型マクロ・ブロック(たとえば、64×64または32×32)およびそのパーティションが少なくとも1つの非0係数または全0係数を含むかどうかを表す階層的CBP値を利用することができる。したがって、エンコーダは、マクロ・ブロックが16×16ピクセルよりも大きいサイズを備えるようなデジタル・ビデオストリームのコード化ユニットの大型マクロ・ブロックを符号化し、ブロックのサイズを識別するブロック・タイプ・シンタックス情報を生成し、ブロックが少なくとも1つの非0係数を含むかどうかを識別するような、ブロックのCBP値を生成し、該当する場合、ブロックの様々なパーティション・レベルの追加のCBP値を生成することができる。
【0118】
一例では、階層的CBP値は、長さがプレフィックスの値に依存するビットアレイ(たとえば、ビットベクトル)を備えることができる。アレイは、さらに、図5に示すツリー構造など、CBP値の階層を表すことができる。アレイはツリーのノードを幅優先様式で表すことができ、各ノードはアレイ中のビットに対応する。一例では、ツリーのノードが、「1」にセットされたビットを有するとき、ノードは、(4つのパーティションに対応する)4つのブランチを有し、ビットが「0」にクリアされたとき、ノードはブランチを有しない。
【0119】
この例では、特定のノードXから分岐するノードの値を識別するために、エンコーダおよび/またはデコーダは、次の計算によってノードxから分岐するノードを表すノードYにおいて開始する4つの連続ビットを判断することができる。
【数2】

【0120】
上式で、tree[]は、開始インデックス0をもつビットアレイに対応し、iは、アレイtree[]への整数インデックスであり、xは、tree[]中のノードXのインデックスに対応し、yは、ノードXの第1のブランチノードであるノードYのインデックスに対応する。3つの後続のアレイ位置(すなわち、y+1、y+2、およびy+3)はノードXの他のブランチノードに対応する。
【0121】
ビデオ・エンコーダ50(図2)などのエンコーダは、16×16ブロックのCBP値をセットするためのITU H.264によって規定された方法など、既存の方法を使用して、少なくとも1つの非0係数をもつ32×32ピクセル・パーティションの16×16ピクセル・パーティションのCBP値を64×64ピクセル・マクロ・ブロックのシンタックスの一部として割り当てることができる。エンコーダはまた、パーティションのサイズ、パーティションに対応するブロックのタイプ(たとえば、クロマブロックまたはルーマブロック)、またはパーティションの他の特性に基づいて、少なくとも1つの非0係数を有する32×32ピクセル・パーティションのパーティションのCBP値を選択することができる。32×32ピクセル・パーティションのパーティションのCBP値をセットするための例示的な方法について、図8および図9に関してさらに詳細に説明する。
【0122】
図6〜図9は、本開示の技法による様々なコード化ブロック・パターン(CBP)値をセットするための例示的な方法を示すフローチャートである。図6〜図9の例示的な方法を64×64ピクセル・マクロ・ブロックに関して説明するが、他のサイズのマクロ・ブロックの階層的CBP値を割り当てるために同様の技法を適用することができることを理解されたい。図6〜図9の例をビデオ・エンコーダ50(図2)に関して説明するが、他のエンコーダが、規格よりも大きいマクロ・ブロックにCBP値を割り当てるために同様の方法を採用することができることを理解されたい。同様に、デコーダは、マクロ・ブロックの特定のCBP値の意味を解釈するための、逆ではあるが同様の方法を利用することができる。たとえば、ビット・ストリーム中で受信されたインター・コード化マクロ・ブロックがCBP値「0」を有する場合、デコーダは、マクロ・ブロックの残差データを受信せず、単に、復号されたマクロ・ブロックとして動きベクトルによって識別される予測ブロック、またはマクロ・ブロックのパーティションに関する動きベクトルによって識別される予測ブロックのグループを生成する。
【0123】
図6は、例示的な64×64ピクセル・マクロ・ブロックのCBP64値をセットするための例示的な方法を示すフローチャートである。同様の方法を64×64よりも大きいマクロ・ブロックに適用することができる。最初に、ビデオ・エンコーダ50は64×64ピクセル・マクロ・ブロックを受信する(100)。動き推定ユニット36および動き補償ユニット35は、次いで、それぞれ、マクロ・ブロックを符号化するために1つまたは複数の動きベクトルおよび1つまたは複数の残差ブロックを生成する。変換ユニット38の出力は、一般に、イントラ・コード化ブロックまたはインター・コード化ブロックの残差ブロックの残差変換係数値のアレイを備え、アレイは、一連の量子化変換係数を生成するために量子化ユニット40によって量子化される。
【0124】
エントロピー・コーディング・ユニット46は、エントロピー・コーディングと、エントロピー・コーディングとは別の他のコーディング機能とを与えることができる。たとえば、CAVLC、CABAC、または他のエントロピー・コーディング機能に加えて、エントロピー・コーディング・ユニット46またはビデオ・エンコーダ50の別のユニットは、大型マクロ・ブロックおよびパーティションのCBP値を判断することができる。特に、エントロピー・コーディング・ユニット46は、マクロ・ブロックが少なくとも1つの非0量子化変換係数を有するかどうかを最初に判断することによって、64×64ピクセル・マクロ・ブロックのCBP64値を判断する(102)。エントロピー・コーディング・ユニット46は、変換係数のすべてが値0を有すると判断したとき(102の「いいえ」ブランチ)、64×64マクロ・ブロックのCBP64値をクリアし、たとえば、CBP64値のビットを「0」にリセットする(104)。エントロピー・コーディング・ユニット46は、64×65マクロ・ブロックの少なくとも1つの非0係数を識別したとき(102の「はい」ブランチ)、CBP64値をセットし、たとえば、CBP64値のビットを「1」にセットする(106)。
【0125】
マクロ・ブロックが全0係数を有するとき、エントロピー・コーディング・ユニット46は、マクロ・ブロックのパーティションの追加のCBP値を確定する必要がなく、これによりオーバーヘッドを低減することができる。一例では、しかしながら、マクロ・ブロックが少なくとも1つの非0係数を有するとき、エントロピー・コーディング・ユニット46は、続いて64×64ピクセル・マクロ・ブロックの4つの32×32ピクセル・パーティションの各々についてCBP値を判断する(108)。エントロピー・コーディング・ユニット46は、各々が64×64マクロ・ブロックの4つの32×32ピクセル・パーティションのうちの異なる1つに対応する4つのCBP32値を確定するために、図7に関して説明する方法を4つのパーティションの各々について1回ずつ、4回利用することができる。このようにして、マクロ・ブロックが全0係数を有するとき、エントロピー・コーディング・ユニット46は、マクロ・ブロックが全0係数を有することを示すために値「0」をもつ単一ビットを送信し、マクロ・ブロックが少なくとも1つの非0係数を有するとき、エントロピー・コーディング・ユニット46は、5ビット、すなわち、マクロ・ブロックのための1ビットと、各々がマクロ・ブロックの4つのパーティションのうちの1つに対応する4ビットとを送信することができる。さらに、パーティションが少なくとも1つの非0係数を含むとき、符号化ビット・ストリーム中でパーティションの残差データを送信することができる。上述のCBP64の例の場合と同様に、4つの追加のビットのうちの最初の3つが0であるとき、デコーダは、第4の追加のビットが値1を有すると判断することができるので、第4の追加のビットは不要である。したがって、いくつかの例では、エンコーダは、3つの0および1、すなわち、「0001」ではなく、3つの0、すなわち、「000」のみを送信することができる。
【0126】
図7は、64×64ピクセル・マクロ・ブロックの32×32ピクセル・パーティションのCBP32値をセットするための例示的な方法を示すフローチャートである。最初に、次のパーティション・レベルについて、エントロピー・コーディング・ユニット46が、マクロ・ブロックの32×32ピクセル・パーティション、たとえば、図6に関して言及した4つのパーティションのうちの1つを受信する(110)。エントロピー・コーディング・ユニット46は、次いで、パーティションが少なくとも1つの非0係数を含むかどうかを最初に判断することによって、32×32ピクセル・パーティションのCBP32値を判断する(112)。エントロピー・コーディング・ユニット46は、パーティションの係数のすべてが値0を有すると判断したとき(112の「いいえ」ブランチ)、CBP32値をクリアし、たとえば、CBP32値のビットを「0」にリセットする(114)。エントロピー・コーディング・ユニット46は、パーティションの少なくとも1つの非0係数を識別したとき(112の「はい」ブランチ)、CBP32値をセットし、たとえば、CBP32値のビットを「1」にセットする(116)。
【0127】
一例では、パーティションが全0係数を有するとき、エントロピー・コーディング・ユニット46はパーティションの追加のCBP値を確定しない。しかしながら、パーティションが少なくとも1つの非0係数を含むとき、エントロピー・コーディング・ユニット46は、マクロ・ブロックの32×32ピクセル・パーティションの4つの16×16ピクセル・パーティションの各々についてCBP値を判断する。エントロピー・コーディング・ユニット46は、各々が4つの16×16ピクセル・パーティションのうちの1つに対応する4つのCBP16値を確定するために、図8に関して説明する方法を利用することができる。
【0128】
このようにして、パーティションが全0係数を有するとき、エントロピー・コーディング・ユニット46は、パーティションが全0係数を有することを示すために値「0」をもつ単一ビットをセットし、パーティションが少なくとも1つの非0係数を有するとき、エントロピー・コーディング・ユニット46は、5ビット、すなわち、パーティションのための1ビットと、各々がパーティションの4つのサブパーティションのうちの異なる1つに対応する4ビットとを含むことができる。したがって、先行するパーティション・レベル中のパーティションが少なくとも1つの非0変換係数値を有したとき、各追加のパーティション・レベルは4つの追加のCBPビットを提示することができる。一例として、それぞれ、64×64マクロ・ブロックがCBP値1を有し、4つの32×32パーティションがCBP値1、0、1および1を有する場合、その時点までの全体的なCBP値は11011である。32×32パーティションの、たとえば、16×16パーティションへの追加のパーティションのために追加のCBPビットを追加することができる。
【0129】
図8は、64×64ピクセル・マクロ・ブロックの32×32ピクセル・パーティションの16×16ピクセル・パーティションのCBP16値をセットするための例示的な方法を示すフローチャートである。いくつかの16×16ピクセル・パーティションについては、ビデオ・エンコーダ50は、以下で説明するように、ITU H.264などのビデオ・コーディング規格によって規定されているCBP値を利用することができる。他の16×16パーティションについては、ビデオ・エンコーダ50は、本開示の他の技法によるCBP値を利用することができる。最初に、図8に示すように、エントロピー・コーディング・ユニット46は、16×16パーティション、たとえば、図7に関して説明した32×32パーティションの16×16パーティションのうちの1つを受信する(120)。
【0130】
エントロピー・コーディング・ユニット46は、次いで、16×16ピクセル・パーティションの動きパーティションが8×8ピクセルブロックよりも大きいかどうかを判断する(122)。一般に、動きパーティションは、動きが集中するパーティションを表す。たとえば、ただ1つの動きベクトルをもつ16×16ピクセル・パーティションを16×16動きパーティションと見なすことができる。同様に、各々が1つの動きベクトルを有する2つの8×16パーティションをもつ16×16ピクセル・パーティションについて、2つの8×16パーティションの各々を8×16動きパーティションと見なすことができる。いずれの場合も、動きパーティションが8×8ピクセルブロックよりも大きくないとき(122の「いいえ」ブランチ)、エントロピー・コーディング・ユニット46は、図8の例では、ITU H.264によって規定されているのと同様にして16×16ピクセル・パーティションにCBP値を割り当てる(124)。
【0131】
8×8ピクセルブロックよりも大きい16×16ピクセル・パーティションの動きパーティションが存在するとき(122の「はい」ブランチ)、エントロピー・コーディング・ユニット46は、ステップ125に続くステップを使用してlumacbp16値を構成し、送信する(125)。図8の例では、lumacbp16値を構成するために、エントロピー・コーディング・ユニット46は、パーティションの16×16ピクセルルーマ成分が少なくとも1つの非0係数を有するかどうかを判断する(126)。16×16ピクセルルーマ成分が全0係数を有するとき(126の「いいえ」ブランチ)、図8の例では、エントロピー・コーディング・ユニット46は、ITU H.264のCoded Block Pattern Chroma部分に従ってCBP16値を割り当てる(128)。
【0132】
エントロピー・コーディング・ユニット46は、16×16ピクセルルーマ成分が少なくとも1つの非0係数を有すると判断したとき(126の「はい」ブランチ)、16×16ピクセル・パーティションの変換サイズ・フラグを判断する(130)。変換サイズ・フラグは、一般に、パーティションのために使用されている変換を示す。変換サイズ・フラグによって表される変換は、4×4変換、8×8変換、16×16変換、16×8変換、または8×16変換のうちの1つを含むことができる。変換サイズ・フラグは、可能な変換の1つを識別する計数値に対応する整数値を備えることができる。エントロピー・コーディング・ユニット46は、次いで、変換サイズ・フラグが、変換サイズが16×8(または8×16)以上であることを表すかどうかを判断する(132)。
【0133】
変換サイズ・フラグが、変換サイズが16×8(または8×16)以上であることを示さないとき(132の「いいえ」ブランチ)、図8の例では、エントロピー・コーディング・ユニット46はITU H.264に従ってCBP16値を割り当てる(134)。変換サイズ・フラグが、変換サイズが16×8(または8×16)以上であることを示すとき(132の「はい」ブランチ)、エントロピー・コーディング・ユニット46は、次いで、16×16ピクセル・パーティションのタイプが、2つの16×8ピクセル・パーティションであるか、2つの8×16ピクセル・パーティションであるかを判断する(136)。
【0134】
16×16ピクセル・パーティションのタイプが2つの16×8ピクセル・パーティションでも2つの8×16ピクセル・パーティションでもないとき(138の「いいえ」ブランチ)、図8の例では、エントロピー・コーディング・ユニット46は、ITU H.264によって規定されているChroma Coded Block Partitionに従ってCBP16値を割り当てる(140)。16×16ピクセル・パーティションのタイプが2つの16×8ピクセル・パーティションまたは2つの8×16ピクセル・パーティションのいずれかであるとき(136の「はい」ブランチ)、エントロピー・コーディング・ユニット46は、同じくITU H.264によって規定されているChroma Coded Block Patternを使用するが、さらに、たとえば、図9に関して説明する方法に従ってCBP16値に2ビットluma16×8_CBP値を割り当てる(142)。
【0135】
図9は、2ビットluma16×8_CBP値を判断するための例示的な方法を示すフローチャートである。エントロピー・コーディング・ユニット46は、2つの16×8ピクセル・パーティションまたは2つの8×16ピクセル・パーティションにさらに区分される16×16ピクセル・パーティションを受信する(150)。エントロピー・コーディング・ユニット46は、一般に、16×16ピクセル・パーティションの対応するサブブロックが少なくとも1つの非0係数を含むかどうかに従って、luma16×8_CBPの各ビットを割り当てる。
【0136】
エントロピー・コーディング・ユニット46は、第1のサブブロックが少なくとも1つの非0係数を有するかどうかを判断するために、16×16ピクセル・パーティションの第1のサブブロックが少なくとも1つの非0係数を有するかどうかを判断する(152)。第1のサブブロックが全0係数を有するとき(152の「いいえ」ブランチ)、エントロピー・コーディング・ユニット46はluma16×8_CBPの第1のビットをクリアし、たとえば、luma16×8_CBP[0]に値「0」を割り当てる(154)。第1のサブブロックが少なくとも1つの非0係数を有するとき(152の「はい」ブランチ)、エントロピー・コーディング・ユニット46はluma16×8_CBPの第1のビットをセットし、たとえば、luma16×8_CBP[0]に値「1」を割り当てる(156)。
【0137】
エントロピー・コーディング・ユニット46はまた、16×16ピクセル・パーティションの第2のサブパーティションが少なくとも1つの非0係数を有するかどうかを判断する(158)。第2のサブパーティションが全0係数を有するとき(158の「いいえ」ブランチ)、エントロピー・コーディング・ユニット46はluma16×8_CBPの第2のビットをクリアし、たとえば、luma16×8_CBP[1]に値「0」を割り当てる(160)。第2のサブブロックが少なくとも1つの非0係数を有するとき(158の「はい」ブランチ)、エントロピー・コーディング・ユニット46は、次いで、luma16×8_CBPの第2のビットをセットし、たとえば、luma16×8_CBP[1]に値「1」を割り当てる(162)。
【0138】
以下の擬似コードは、図8および図9に関して説明した方法の1つの例示的実装形態を与える。
【数3】

【0139】
擬似コードにおいて、「lumacbp16」は、16×16ルーマブロック全体が非0係数を有するか否かを示す1ビットフラグを付加する動作に対応する。「lumacbp16」が1に等しいとき、少なくとも1つの非0係数がある。関数「Transform_size_flag」は、使用されている変換、たとえば、4×4変換、8×8変換、16×16変換(16×16以上の動きパーティション用)、16×8変換(P_16×8用)、または8×16変換(P_8×16用)のうちの1つを示す結果を有する実行される計算を指す。TRANSFORM_SIZE_GREATER_THAN_16×8は、変換サイズが16×8または8×16以上であることを示すために使用される計数値(たとえば「2」)である。transform_size_flagの結果は、64×64ピクセル・マクロ・ブロックのシンタックス情報に組み込まれる。
【0140】
「luma16×8_cbp」は、各ビットがP_16×8またはP_8×16の2つのパーティションのうちの1つが非0係数を有するか否かを示す2ビットの数を生成する計算を指す。luma16×8_cbpから生じた2ビットの数は64×64ピクセル・マクロ・ブロックのシンタックスに組み込まれる。値「chroma_cbp」は、ITU H.264によって規定されているCodedBlockPatternChromaと同様にして計算できる。計算されたchroma_cbp値は64×64ピクセル・マクロ・ブロックのシンタックス情報に組み込まれる。関数h264_cbpは、ITU H.264において定義されているCBPと同様に計算できる。計算されたH264_cbp値は64×64ピクセル・マクロ・ブロックのシンタックス情報に組み込まれる。
【0141】
概して、図6〜図9に記載の方法は、ビデオ・エンコーダを用いて、16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを符号化することと、ブロックのサイズを示すブロック・タイプ・シンタックス情報を生成することと、符号化ブロックのコード化ブロック・パターン値を生成することであって、コード化ブロック・パターン値は、符号化ブロックが少なくとも1つの非0係数を含むかどうかを示す、生成することとを含むことができる。
【0142】
図10は、64×64ピクセル・マクロ・ブロックの例示的な構成を示すブロック図である。図10のマクロ・ブロックは、図10中でA、B、C、およびDと標示された4つの32×32パーティションを備える。図4Aに関して説明したように、一例では、サブパーティションなしのブロック全体(64×64)、等しいサイズの2つの水平パーティション(32×64および32×64)、等しいサイズの2つの垂直パーティション(64×32および64×32)、または等しいサイズの4つの方形パーティション(32×32、32×32、32×32および32×32)の4つの方法のいずれか1つでブロックを区分することができる。
【0143】
図10の例では、ブロックパーティション全体はブロックA、B、C、およびDの各々を備え、等しいサイズの2つの水平パーティションのうちの第1のパーティションはAとBとを備え、等しいサイズの2つの水平パーティションのうちの第2のパーティションはCとDとを備え、等しいサイズの2つの垂直パーティションのうちの第1のパーティションはAとCとを備え、等しいサイズの2つの垂直パーティションのうちの第2のパーティションはBとDとを備え、等しいサイズの4つの方形パーティションはA、B、C、およびDの各々のうちの1つに対応する。同様のパーティション方式を、任意のサイズのブロック、たとえば、64×64ピクセルよりも大きいサイズ、32×32ピクセル、16×16ピクセル、8×8ピクセル、または他のサイズのビデオ・ブロックのために使用することができる。
【0144】
ビデオ・ブロックをイントラ・コーディングするとき、ビデオ・ブロックを区分するための様々な方法を使用することができる。その上、パーティションの各々を、別様に、すなわち、様々なイントラ・モードなど、異なるモードでイントラ・コーディングすることができる。たとえば、図10のパーティションAなど、32×32パーティションをサイズ16×16ピクセルの等しいサイズの4つのブロックにさらに区分することができる。一例として、ITU H.264には、16×16レベルにおけるイントラ・コーディングと、8×8レベルにおけるイントラ・コーディングと、4×4レベルにおけるイントラ・コーディングとを含む、16×16マクロ・ブロックをイントラ符号化するための3つの異なる方法が記載されている。ただし、ITU H.264は、同じイントラ・コーディング・モードを使用して16×16マクロ・ブロックの各パーティションを符号化することを規定している。したがって、ITU H.264によれば、16×16マクロ・ブロックの1つのサブブロックを4×4レベルにおいてイントラ・コーディングすべき場合、16×16マクロ・ブロックのあらゆるサブブロックを4×4レベルにおいてイントラ・コーディングしなければならない。
【0145】
一方、本開示の技法に従って構成されたエンコーダは混合モード手法を適用することができる。イントラ・コーディングの場合、たとえば、大型マクロ・ブロックは、様々なコーディング・モードで符号化された様々なパーティションを有することができる。一例として、32×32パーティションにおいて、たとえば、図4Bに示すように、1つの16×16パーティションを4×4ピクセルレベルにおいてイントラ・コーディングし、他の16×16パーティションを8×8ピクセルレベルにおいてイントラ・コードコーディングし、1つの16×16パーティションを16×16レベルにおいてイントラ・コーディングすることができる。
【0146】
ビデオ・ブロックをイントラ・コーディングのために等しいサイズの4つのサブブロックに区分すべきとき、イントラ・コーディングすべき第1のブロックを左上のブロックとし、続いて第1のブロックのすぐ右のブロックをコーディングし、続いて第1のブロックのすぐ下のブロックをコーディングし、最後に続いて第1のブロックの右下のブロックをコーディングすることができる。図10の例示的なブロックに関して、イントラ・コーディングの順序はAからB、C、最後にDに進むことになる。図10は64×64ピクセル・マクロ・ブロックを示しているが、異なるサイズの区分されたブロックのイントラ・コーディングは、この同じ順序に従うことができる。
【0147】
ビデオ・ブロックをPフレームまたはPスライスの一部としてインター・コーディングすべきとき、ブロックを4つの上記のパーティションのいずれかに区分することができ、各パーティションを別々に符号化することができる。すなわち、ブロックの各パーティションを、異なる符号化モード、すなわち、イントラ符号化(Iコード化)または単一の参照フレーム/スライス/リストを参照するインター符号化(Pコード化)のいずれかに従って符号化することができる。以下の表1に、サイズN×Nのブロックの各潜在的なパーティションについてのインター符号化情報を要約する。表1で「M」に言及する場合、M=N/2である。以下の表1では、L0は「リスト0」、すなわち、参照フレーム/スライス/リストを指す。N×Nブロックをどのように最良に区分するかを決定するときに、ビデオ・エンコーダ50などのエンコーダは、図11に関してより詳細に説明するように、ラグランジュ乗数に基づいて各MB_N_type(すなわち、パーティションの各タイプ)についてレートひずみコスト情報を分析して、最低コストを最良のパーティション方法として選択することができる。
【表1】

【0148】
上記の表1において、列「MB_N_type」の要素は、N×Nブロックの各パーティションタイプのキーである。列「MB_N_typeの名前」の要素は、N×Nブロックの様々な区分タイプの名前である。名前中の「P」は、Pコーディングを使用して、すなわち、単一のフレーム/スライス/リストを参照してブロックがインター・コーディングされることを指す。名前中の「L0」は、Pコーディングのための参照フレームまたはスライスとして使用される参照フレーム/スライス/リスト、たとえば、「リスト0」を指す。「N×N」は、パーティションがブロック全体であることを指し、「N×M」は、パーティションが幅Nおよび高さMの2つのパーティションであることを指し、「M×N」は、パーティションが幅Mおよび高さNの2つのパーティションであることを指し、「M×M」は、パーティションが、それぞれ幅Mおよび高さMをもつ等しいサイズの4つのパーティションであることを指す。
【0149】
表1において、PN_Skipは、たとえば、コーディングから生じるブロックが全0係数を有するので、ブロックが「スキップ」されたことを暗示する。列「予測モード・パート1」の要素は、パーティションのサブパーティション1のための参照フレーム/スライス/リストを指し、列「予測モード・パート2」の要素は、パーティションのサブパーティション2のための参照フレーム/スライス/リストを指す。P_L0_N×Nは単一のパーティションのみを有するので、第2のサブパーティションはなく、「予測モード・パート2」の対応する要素は「該当なし」である。PN_M×Mについては、別々に符号化できる4つのパーティションブロックが存在する。したがって、PN_M×Mのための両方の予測モード列は「該当なし」を含む。PN_Skipは、P_L0_N×Nの場合と同様に、単一のパートのみを有するので、列「予測モード・パート2」の対応する要素は「該当なし」である。
【0150】
以下の表2は、表1と同様の列および要素を含む。ただし、表2は、双方向予測(B符号化)を使用するインター・コード化ブロックのための様々な符号化モードに対応する。したがって、第1のフレーム/スライス/リスト(L0)と第2のフレーム/スライス/リスト(L1)のいずれかまたは両方によって各パーティションを符号化することができる。「BiPred」は、対応するパーティションがL0とL1の両方から予測されることを指す。表2では、列ラベルおよび値の意味は、表1で使用したものと同様である。
【表2】

【0151】
図11は、N×Nピクセルビデオ・ブロックのための最適な区分および符号化方法を計算するための例示的な方法を示すフローチャートである。概して、図11の方法は、たとえば、図4Aに示す各異なる区分方法に適用される各異なる符号化方法(たとえば、様々な空間モードまたは時間モード)についてコストを計算することと、N×Nピクセルビデオ・ブロックについて最良のレートひずみコストをもつ符号化モードと区分方法との組合せを選択することとを備える。コストは、一般に、レートひずみコスト=ひずみ+λ*レートであるように、レート値およびひずみ値とともにラグランジュ乗数を使用して計算でき、ひずみは、元のブロックとコード化ブロックとの間の誤差を表し、レートは、コーディング・モードをサポートするために必要なビット・レートを表す。場合によっては、マクロ・ブロック、パーティション、スライスまたはフレームレベルについてレートおよびひずみを判断することができる。
【0152】
最初に、ビデオ・エンコーダ50は、符号化すべきN×Nビデオ・ブロックを受信する(170)。たとえば、ビデオ・エンコーダ50は、ビデオ・エンコーダ50が符号化および区分方法を選択すべき64×64大型マクロ・ブロック、または、たとえば、32×32または16×16パーティションなど、そのパーティションを受信する。ビデオ・エンコーダ50は、次いで、様々なイントラ・コーディング・モードやインター・コーディング・モードなどの多種多様なコーディング・モードを使用してN×Nブロックを符号化するためのコストを計算する(172)。N×Nブロックを空間的に符号化するためのコストを計算するために、ビデオ・エンコーダ50は、所与のコーディング・モードでN×Nブロックを符号化するために必要なひずみとビット・レートとを計算し、次いで、コスト=ひずみ(モード,N×N)+λ*レート(モード,N×N)を計算する。ビデオ・エンコーダ50は、指定されたコーディング技法を使用してマクロ・ブロックを符号化し、得られたビット・レートコストとひずみとを判断する。ひずみは、たとえば、絶対値差分和(SAD)メトリック、差分2乗和(SSD)メトリック、または他のピクセル差分メトリックに基づくコード化マクロ・ブロック中のピクセルと元のマクロ・ブロック中のピクセルとのピクセル差分に基づいて判断できる。
【0153】
ビデオ・エンコーダ50は、次いで、N×Nブロックを等しいサイズの重複しない2つの水平N×(N/2)パーティションに区分する。ビデオ・エンコーダ50は、様々なコーディング・モードを使用してパーティションの各々を符号化するためのコストを計算する(176)。たとえば、第1のN×(N/2)パーティションを符号化するためのコストを計算するために、ビデオ・エンコーダ50は、第1のN×(N/2)パーティションを符号化するためのひずみとビット・レートとを計算し、次いで、コスト=ひずみ(モード,第1のパーティション,N×(N/2))+λ*レート(モード,第1のパーティション,N×(N/2))を計算する。
【0154】
ビデオ・エンコーダ50は、次いで、N×Nブロックを等しいサイズの重複しない2つの垂直(N/2)×Nパーティションに区分する。ビデオ・エンコーダ50は、様々なコーディング・モードを使用してパーティションの各々を符号化するためのコストを計算する(178)。たとえば、(N/2)×Nパーティションのうちの第1のパーティションを符号化するためのコストを計算するために、ビデオ・エンコーダ50は、第1の(N/2)×Nパーティションを符号化するためのひずみとビット・レートとを計算し、次いで、コスト=ひずみ(モード,第1のパーティション,(N/2)×N)+λ*レート(モード,第1のパーティション,(N/2)×N)を計算する。ビデオ・エンコーダ50は、(N/2)×Nマクロ・ブロックパーティションの第2のパーティションを符号化するためのコストについて同様の計算を実行する。
【0155】
ビデオ・エンコーダ50は、次いで、N×Nブロックを等しいサイズの重複しない4つの(N/2)×(N/2)パーティションに区分する。ビデオ・エンコーダ50は、様々なコーディング・モードを使用してパーティションを符号化するためのコストを計算する(180)。(N/2)×(N/2)パーティションを符号化するためのコストを計算するために、ビデオ・エンコーダ50は、最初に、左上の(N/2)×(N/2)パーティションを符号化するためのひずみとビット・レートとを計算し、そのコストを、コスト(モード,左上,(N/2)×(N/2))=ひずみ(モード,左上,(N/2)×(N/2))+λ*レート(モード,左上,(N/2)×(N/2))として求める。ビデオ・エンコーダ50は、(1)左上パーティション、(2)右上パーティション、(3)左下パーティション、(4)右下パーティションの順に各(N/2)×(N/2)ブロックのコストを同様に計算する。ビデオ・エンコーダ50は、いくつかの例では、(N/2)×(N/2)パーティションの1つまたは複数に対してこの方法の再帰呼出しを行い、(N/2)×(N/2)パーティションの各々を、たとえば、(N/2)×(N/4)パーティション、(N/4)×(N/2)パーティション、および(N/4)×(N/4)パーティションとしてさらに区分し、別々に符号化するコストを計算する。
【0156】
次に、ビデオ・エンコーダ50は、レートおよびひずみに関して、区分と符号化モードのどの組合せが最良、すなわち、最低コストを生じたかを判断する(182)。たとえば、ビデオ・エンコーダ50は、隣接する2つの(N/2)×(N/2)パーティションを符号化する最良のコストを、隣接する2つの(N/2)×(N/2)パーティションを備えるN×(N/2)パーティションを符号化する最良のコストと比較する。隣接する2つの(N/2)×(N/2)パーティションを符号化する総合コストが、それらを備えるN×(N/2)パーティションを符号化するためのコストを超えるとき、ビデオ・エンコーダ50は、N×(N/2)パーティションを符号化する、より低いコストのオプションを選択する。一般に、ビデオ・エンコーダ50は、最低コストの区分および符号化方法を識別するために、区分方法と符号化モードとのあらゆる組合せを各パーティションに適用することができる。場合によっては、ビデオ・エンコーダ50を、区分と符号化モードとの組合せのより限定されたセットを評価するように構成することができる。
【0157】
最良、たとえば、最低コストの区分および符号化方法を判断した後、ビデオ・エンコーダ50は、最良コストの判断された方法を使用して、N×Nマクロ・ブロックを符号化する(184)。場合によっては、結果は、様々なコーディング・モードを使用してコーディングされるパーティションを有する大型マクロ・ブロックであり得る。様々なコーディング・モードが大型マクロ・ブロック中の様々なパーティションに適用されるように大型マクロ・ブロックに混合モード・コーディングを適用する能力により、マクロ・ブロックを低減されたコストでコーディングすることが可能になる。
【0158】
いくつかの例では、混合モードでコーディングするための方法は、ビデオ・エンコーダ50を用いて16×16ピクセルよりも大きいサイズを有するビデオ・ブロックを受信することと、そのブロックをパーティションに区分することと、第1の符号化モードでパーティションのうちの1つを符号化することと、第1の符号化モードとは異なる第2のコーディング・モードでパーティションのうちの別の1つを符号化することと、ブロックのサイズを示し、パーティションとそれらのパーティションを符号化するために使用される符号化モードとを識別するブロック・タイプ・シンタックス情報を生成することとを含むことができる。
【0159】
図12は、様々なパーティションと各パーティションのための様々な選択された符号化方法とをもつ例示的な64×64ピクセル大型マクロ・ブロックを示すブロック図である。図12の例では、各パーティションは、「I」、「P」、または「B」のうちの1つで標示されている。「I」と標示されたパーティションは、エンコーダが、たとえば、レートひずみ評価に基づいてイントラ・コーディングを利用することを選択したパーティションである。「P」と標示されたパーティションは、エンコーダが、たとえば、レートひずみ評価に基づいて単一参照インター・コーディングを利用することを選択したパーティションである。「B」と標示されたパーティションは、エンコーダが、たとえば、レートひずみ評価に基づいて双予測インター・コーディングを利用することを選択したパーティションである。図12の例では、同じ大型マクロ・ブロック内の様々なパーティションは、様々なパーティション・サイズまたはサブパーティション・サイズと様々なイントラ・コーディング・モードまたはインター・コーディング・モードとを含む様々なコーディング・モードを有する。
【0160】
大型マクロ・ブロックは、H.264コーディング規格の拡張など、所与のコーディング規格のマクロ・ブロック・タイプ、たとえば、mb64_typeまたはmb32_typeを識別するマクロ・ブロックシンタックス要素によって識別されるマクロ・ブロックである。マクロ・ブロック・タイプ・シンタックス要素は、符号化ビデオビット・ストリーム中でマクロ・ブロック・ヘッダシンタックス要素として与えられ得る。図12に示すIコード化、Pコード化およびBコード化パーティションは、様々なコーディング・モード、たとえば、サイズが16×16よりも大きい大型パーティションのための大型ブロック・サイズモード、またはサイズが16×16以下のパーティションのためのH.264モードを含む様々なブロック・サイズをもつイントラ予測モードまたはインター予測モードに従ってコーディングできる。
【0161】
一例では、ビデオ・エンコーダ50などのエンコーダは、図11に関して説明した例示的な方法を使用して、図12の例示的な大型マクロ・ブロックの様々なパーティションおよびサブパーティションについて様々な符号化モードとパーティション・サイズとを選択することができる。たとえば、ビデオ・エンコーダ50は、64×64マクロ・ブロックを受信し、図11の方法を実行し、結果として様々なパーティション・サイズおよびコーディング・モードをもつ図12の例示的なマクロ・ブロックを生成することができる。ただし、区分および符号化モードの選択は、たとえば、マクロ・ブロックが選択されたフレームのタイプ、および図11の方法が実行される入力マクロ・ブロックとに基づいて、その方法の適用から生じ得ることを理解されたい。たとえば、フレームがIフレームを備えるとき、各パーティションはイントラ符号化されることになる。別の例として、フレームがPフレームを備えるとき、各パーティションは、単一の参照フレームに基づいて(すなわち、双予測なしに)イントラ符号化またはインター・コード化され得る。
【0162】
図12の例示的なマクロ・ブロックを、例示のために双予測フレーム(Bフレーム)から選択されたと仮定する。他の例では、マクロ・ブロックがPフレームから選択された場合、ビデオ・エンコーダ50は双方向予測を使用してパーティションを符号化しないであろう。同様に、マクロ・ブロックがIフレームから選択された場合、ビデオ・エンコーダ50は、インター・コーディング、すなわち、P符号化またはB符号化のいずれかを使用してパーティションを符号化しないであろう。しかしながら、いずれの場合も、ビデオ・エンコーダ50は、マクロ・ブロックの様々な部分について様々なパーティション・サイズを選択し、任意の利用可能な符号化モードを使用して各パーティションを符号化することを選択することができる。
【0163】
図12の例では、レートひずみ分析に基づくパーティションとモード選択との組合せが、1つの32×32Bコード化パーティション、1つの32×32Pコード化パーティション、1つの16×32Iコード化パーティション、1つの32×16Bコード化パーティション、1つの16×16Pコード化パーティション、1つの16×8Pコード化パーティション、1つの8×16Pコード化パーティション、1つの8×8Pコード化パーティション、1つの8×8Bコード化パーティション、1つの8×8Iコード化パーティション、および様々なコーディング・モードを有する多数のより小さいサブパーティションを生じたと仮定する。図12の例は、大型マクロ・ブロック中のパーティションの混合モード・コーディングの概念図のために与えるものであり、必ずしも特定の大型64×64マクロ・ブロックの実際のコーディング結果を表すと考えるべきではない。
【0164】
図13は、ビデオ・シーケンスのフレームまたはスライスを符号化するためのマクロ・ブロックの最適サイズを判断するための例示的な方法を示すフローチャートである。フレームのマクロ・ブロックの最適サイズを選択することに関して説明するが、図13に関して説明するのと同様の方法を使用して、スライスのマクロ・ブロックの最適サイズを選択することができる。同様に、図13の方法をビデオ・エンコーダ50に関して説明するが、ビデオ・シーケンスのフレームを符号化するためのマクロ・ブロックの最適(たとえば、最小コストの)サイズを判断するために、任意のエンコーダが図13の例示的な方法を利用することができることを理解されたい。概して、図13の方法は、16×16マクロ・ブロック、32×32マクロ・ブロック、および64×64マクロ・ブロックの各々について1回ずつ、3回符号化パスを実行することを備え、ビデオ・エンコーダは、どのマクロ・ブロック・サイズが最良のレートひずみを与えるかを判断するために、各パスについてレートひずみメトリックを計算することができる。
【0165】
ビデオ・エンコーダ50は、最初に、符号化フレームF16を生成するために、第1の符号化パス中に16×16ピクセル・マクロ・ブロックを使用して、たとえば、関数符号化(フレーム、MB16_type)を使用してフレームを符号化する(190)。第1の符号化パスの後、ビデオ・エンコーダ50は、16×16ピクセル・マクロ・ブロックの使用に基づくビット・レートおよびひずみをそれぞれR16およびD16として計算する(192)。ビデオ・エンコーダ50は、次いで、ラグランジュ乗数を使用して16×16ピクセル・マクロ・ブロックを使用するコストC16の形態でレートひずみメトリックC16=D16+λ*R16を計算する(194)。たとえば、H.264規格に従って16×16ピクセル・マクロ・ブロックについてコーディング・モードおよびパーティション・サイズを選択する。
【0166】
ビデオ・エンコーダ50は、次いで、符号化フレームF32を生成するために、第2の符号化パス中に32×32ピクセル・マクロ・ブロックを使用して、たとえば、関数符号化(フレーム、MB32_type)を使用してフレームを符号化する(196)。第2の符号化パスの後、ビデオ・エンコーダ50は、32×32ピクセル・マクロ・ブロックの使用に基づくビット・レートおよびひずみをそれぞれR32およびD32として計算する(198)。ビデオ・エンコーダ50は、次いで、ラグランジュ乗数を使用して、32×32ピクセル・マクロ・ブロックを使用するコストC32の形態でレートひずみメトリックC32=D32+λ*R32を計算する(200)。たとえば、図11および図12に関して説明したレートおよびひずみ評価技法を使用して、32×32ピクセル・マクロ・ブロックについてコーディング・モードおよびパーティション・サイズを選択する。
【0167】
ビデオ・エンコーダ50は、次いで、符号化フレームF64を生成するために、第3の符号化パス中に64×64ピクセル・マクロ・ブロックを使用して、たとえば、関数符号化(フレーム、MB64_type)を使用してフレームを符号化する(202)。第3の符号化パスの後、ビデオ・エンコーダ50は、64×64ピクセル・マクロ・ブロックの使用に基づくビット・レートおよびひずみをそれぞれR64およびD64として計算する(204)。ビデオ・エンコーダ50は、次いで、ラグランジュ乗数を使用して、64×64ピクセル・マクロ・ブロックを使用するコストC64の形態でレートひずみメトリックC64=D64+λ*R64を計算する(206)。たとえば、図11および図12に関して説明したレートおよびひずみ評価技法を使用して、64×64ピクセル・マクロ・ブロックについてコーディング・モードおよびパーティション・サイズを選択する。
【0168】
次に、ビデオ・エンコーダ50は、フレームについてメトリックC16、C32、およびC64のいずれが最低であるかを判断する(208)。ビデオ・エンコーダ50は、最低コストを生じたマクロ・ブロック・サイズで符号化されたフレームを使用することを選択する(210)。したがって、たとえば、C16が最低であるとき、ビデオ・エンコーダ50は、記憶または送信のためにビット・ストリーム中で符号化フレームとして16×16マクロ・ブロックで符号化されたフレームF16をデコーダにフォワーディングする。C32が最低であるとき、ビデオ・エンコーダ50は、32×32マクロ・ブロックで符号化されたF32をフォワーディングする。C64が最低であるとき、ビデオ・エンコーダ50は、64×64マクロ・ブロックで符号化されたF64をフォワーディングする。
【0169】
他の例では、ビデオ・エンコーダ50は任意の順序で符号化パスを実行することができる。たとえば、ビデオ・エンコーダ50は、64×64マクロ・ブロック符号化パスで開始し、2番目に32×32マクロ・ブロック符号化パスを実行し、16×16マクロ・ブロック符号化パスで終了することができる。また、様々なサイズのマクロ・ブロックをもつスライスなど、複数のマクロ・ブロックを備える他のコード化ユニットを符号化するために同様の方法を使用することができる。たとえば、ビデオ・エンコーダ50は、フレーム全体ではなくフレームのスライスを符号化するための最適マクロ・ブロック・サイズを選択するために、図13と同様の方法を適用することができる。
【0170】
ビデオ・エンコーダ50はまた、デコーダが使用するために、コード化ユニットのヘッダ中で特定のコード化ユニット(たとえば、フレームまたはスライス)のマクロ・ブロックのサイズの識別子を送信することができる。図13の方法によれば、方法は、デジタル・ビデオ・エンコーダを用いて、デジタル・ビデオストリームのコード化ユニットを受信することと、16×16ピクセルをそれぞれ備える第1の複数のブロックを使用してコード化ユニットを符号化するためのレートひずみに対応する第1のレートひずみメトリックを計算することと、16×16ピクセルよりも大きいピクセルをそれぞれ備える第2の複数のブロックを使用してコード化ユニットを符号化するためのレートひずみに対応する第2のレートひずみメトリックを計算することと、コード化ユニットについて第1のレートひずみメトリックと第2のレートひずみメトリックのいずれが最低であるかを判断することとを含むことができる。方法は、第1のレートひずみメトリックが最低であると判断されたときは第1の複数のブロックを使用してコード化ユニットを符号化し、第2のレートひずみメトリックが最低であると判断されたときは第2の複数のブロックを使用してコード化ユニットを符号化することをさらに含むことができる。
【0171】
図14は、本開示で説明する様々な技法のいずれかを使用して、規格よりも大きいマクロ・ブロックを使用してデジタル・ビデオ・データを符号化および/または復号することができるビデオ・エンコーダ/デコーダコーデック234を含む例示的なワイヤレス通信デバイス230を示すブロック図である。図14の例では、ワイヤレス通信デバイス230は、ビデオ・カメラ232と、ビデオ・エンコーダデコーダ(コーデック)234と、変調器/復調器(モデム)236と、トランシーバ238と、プロセッサ240と、ユーザ・インターフェース242と、メモリ244と、データ記憶デバイス246と、アンテナ248と、バス250とを含む。
【0172】
図14に示すワイヤレス通信デバイス230中に含まれる構成要素は、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の適切な組合せによって実現できる。図示の例では、構成要素は別々のユニットとして示されている。しかしながら、他の例では、様々な構成要素は、共通のハードウェアおよび/またはソフトウェア内の組合せユニットに統合できる。一例として、メモリ244は、ビデオ・コーデック234の様々な機能に対応する、プロセッサ240によって実行可能な命令を記憶することができる。別の例として、ビデオ・カメラ232は、ビデオ・コーデック234の機能、たとえば、ビデオ・データの符号化および/または復号を実行するビデオ・コーデックを含むことができる。
【0173】
一例では、ビデオ・カメラ232はビデオ・ソース18(図1)に対応し得る。一般に、ビデオ・カメラ232は、デジタル・ビデオ・データを生成するために、センサアレイによってキャプチャされたビデオ・データを記録することができる。ビデオ・カメラ232は、未加工の記録されたデジタル・ビデオ・データを符号化のためにビデオ・コーデック234に送信し、次いで、データ記憶のためにバス250を介してデータ記憶デバイス246に送信することができる。プロセッサ240は、バス250を介して、ビデオを記録するためのモードと、ビデオを記録するためのフレーム・レートと、記録を終了するかまたはフレーム・レートモードを変更する時間と、ビデオ・データをビデオ・コーデック234に送信する時間とに関する信号、または他のモードまたはパラメータを示す信号をビデオ・カメラ232に送信することができる。
【0174】
ユーザ・インターフェース242は、入力インターフェースや出力インターフェースなど、1つまたは複数のインターフェースを備えることができる。たとえば、ユーザ・インターフェース242は、タッチスクリーン、キーパッド、ボタン、ビューファインダの働きをすることができるスクリーン、マイクロフォン、スピーカー、または他のインターフェースを含むことができる。ビデオ・カメラ232がビデオ・データを受信すると、プロセッサ240は、ビューファインダ上で表示すべきビデオ・データをユーザ・インターフェース242に送信するために、ビデオ・カメラ232にシグナリングすることができる。
【0175】
ビデオ・コーデック234は、ビデオ・カメラ232からのビデオ・データを符号化し、アンテナ248、トランシーバ238、およびモデム236を介して受信されたビデオ・データを復号することができる。ビデオ・コーデック234は、追加または代替として、再生のためにデータ記憶デバイス246から受信された、前に符号化されたデータを復号することができる。ビデオ・コーデック234は、従来のビデオ符号化規格によって規定されたマクロ・ブロックのサイズよりも大きいマクロ・ブロックを使用してデジタル・ビデオ・データを符号化および/または復号することができる。たとえば、ビデオ・コーデック234は、64×64ピクセルまたは32×32ピクセルを備える大型マクロ・ブロックを使用してデジタル・ビデオ・データを符号化および/または復号することができる。大型マクロ・ブロックは、H.264規格の拡張などのビデオ規格に従ってマクロ・ブロック・タイプ・シンタックス要素を用いて識別できる。
【0176】
ビデオ・コーデック234は、ビデオ・エンコーダ50(図2)および/またはビデオ・デコーダ60(図3)のいずれかまたは両方の機能、ならびに本開示で説明する他の符号化/復号機能または技法を実行することができる。たとえば、コーデック234は、大型マクロ・ブロックを多種多様なサイズのより小さいパーティションに区分し、選択されたパーティションに対して様々なコーディング・モード、たとえば、空間的(I)コーディング・モードまたは時間的(PまたはB)コーディング・モードを使用することができる。パーティション・サイズおよびコーディング・モードの選択は、そのようなパーティション・サイズおよびコーディング・モードのレートひずみ結果に基づくことができる。コーデック234はまた、大型マクロ・ブロック内の非0係数を有するコード化マクロ・ブロックおよびパーティションを識別するために、階層コード化ブロック・パターン(CBP)値を利用することができる。さらに、いくつかの例では、コーデック234は、フレーム、スライスまたは他のコーディング・ユニットについて、より好都合な結果を生じるマクロ・ブロック・サイズを選択するために、大型マクロ・ブロックと小型マクロ・ブロックのレートひずみメトリックを比較することができる。
【0177】
ユーザは、データ記憶デバイス246中の記録されたビデオ・シーケンスを、モデム236、トランシーバ238、およびアンテナ248を介して、別のワイヤレス通信デバイスなど、別のデバイスに送信するために、ユーザ・インターフェース242と対話することができる。本開示で説明する拡張または修正を条件として、MPEG−2、MPEG−3、MPEG−4、H.263、H.264、または他のビデオ符号化規格などの符号化規格に従ってビデオ・シーケンスを符号化することができる。たとえば、本開示で説明するように、規格よりも大きいマクロ・ブロックを使用してビデオ・シーケンスを符号化することもできる。ワイヤレス通信デバイス230はまた、符号化ビデオセグメントを受信し、受信したビデオ・シーケンスをデータ記憶デバイス246に記憶することができる。
【0178】
受信した符号化ビデオ・シーケンスのマクロ・ブロックは、従来のビデオ符号化規格によって指定されたマクロ・ブロックよりも大きいとすることができる。記録されたビデオ・シーケンスまたは受信したビデオセグメントなど、データ記憶デバイス246中の符号化ビデオセグメントを表示するために、ビデオ・コーデック234は、ビデオ・シーケンスを復号し、ビデオセグメントの復号されたフレームをユーザ・インターフェース242に送信する。ビデオ・シーケンスがオーディオデータを含むとき、ビデオ・コーデック234はオーディオを復号することができ、またはワイヤレス通信デバイス230は、オーディオを復号するためのオーディオ・コーデック(図示せず)をさらに含むことができる。このようにして、ビデオ・コーデック234は、エンコーダの機能とデコーダの機能の両方を実行することができる。
【0179】
図14のワイヤレス通信デバイス230のメモリ244は、プロセッサ240および/またはビデオ・コーデック234に、符号化ビデオ・データを記憶することに加えて様々なタスクを実行させるコンピュータ可読命令で符号化できる。そのような命令は、データ記憶デバイス246などのデータ記憶デバイスからメモリ244にロードできる。たとえば、命令は、プロセッサ240に、ビデオ・コーデック234に関して説明した機能を実行させることができる。
【0180】
図15は、例示的な階層コード化ブロック・パターン(CBP)260を示すブロック図である。CBP260の例は、概して、64×64ピクセル・マクロ・ブロックのシンタックス情報の部分に対応する。図15の例では、CBP260は、CBP64値262と、4つのCBP32値264、266、268、270と、4つのCBP16値272、274、276、278とを備える。CBP260の各ブロックは1つまたは複数のビットを含むことができる。一例では、CBP64値262が、大型マクロ・ブロック中に少なくとも1つの非0係数があることを示す値「1」をもつビットであるとき、CBP260は、図15の例に示すように、大型64×64マクロ・ブロックの4つの32×32パーティションの4つのCBP32値264、266、268、270を含む。
【0181】
別の例では、CBP64値262が値「0」をもつビットであるとき、CBP260は、値「0」が、CBP260に対応するブロックが全0値係数を有することを示し得るので、CBP64のみからなることができる。したがって、そのブロックのすべてのパーティションは、同様に全0値係数を含んでいることになる。一例では、CBP64が値「1」をもつビットであり、特定の32×32パーティションのCBP32値のうちの1つが値「1」をもつビットであるとき、その32×32パーティションのCBP32値は、たとえば、CBP32値266に関して示すように、CBP16値を表す4つのブランチを有する。一例では、CBP32値が値「0」をもつビットであるとき、CBP32はブランチを有しない。図15の例では、CBP260は、CBP64値が「1」であり、32×32パーティションのうちの1つがCBP32値「1」を有することを示す「10100」の5ビットプレフィックスを、CBP32の値「1」をもつ32×32パーティションの16×16パーティションに対応する4つのCBP16値272、274、276、278に対応する後続のビットとともに有することができる。図15の例では、単一のCBP32値のみが値「1」を有するものとして示されているが、他の例では、2つ、3つまたは4つすべての32×32パーティションがCBP32値「1」を有することができ、その場合、対応するCBP16値をもつ4つの16×16パーティションの複数のインスタンスが必要とされることになる。
【0182】
図15の例では、4つの16×16パーティションの4つのCBP16値272、274、276、278を様々な方法に従って、たとえば、図8および図9の方法に従って計算することができる。CBP16値272、274、276、278のいずれかまたはすべては、「lumacbp16」値、transform_size_flag、および/またはluma16×8_cbpを含むことができる。CBP16値272、274、276、278はまた、図8および図9に関して説明したように、ITU H.264において定義されているCBP値に従って、またはITU H.264におけるCodedBlockPatternChromaとして計算できる。図15の例では、CBP16 278が値「1」を有し、他のCBP16値272、274、276が値「0」を有すると仮定すると、64×64マクロ・ブロックの9ビットCBP値は「101000001」となり、各ビットは、CBP/パーティション階層中のそれぞれのレベルにおけるパーティションのうちの1つに対応する。
【0183】
図16は、CBP260(図15)に対応する例示的なツリー構造280を示すブロック図である。CBP64ノード282はCBP64値262に対応し、CBP32ノード284、286、288、290は、それぞれCBP32値264、266、268、270の各々に対応し、CBP16ノード292、294、296、298は、それぞれCBP16値272、274、276、278の各々に対応する。このようにして、本開示で定義されるコード化ブロック・パターン値は階層CBPに対応し得る。ツリーにおいて別のブランチを生じる各ノードは、それぞれのCBP値「1」に対応する。図15および図16の例では、CBP64 282とCBP32 286は、両方とも値「1」を有し、可能なCBP値「1」をもつ、すなわち、次のパーティション・レベルにおける少なくとも1つのパーティションが少なくとも1つの非0変換係数値を含む、さらなるパーティションを生じる。
【0184】
図17は、コード化ユニットのビデオ・ブロックのためのブロック・ベースのシンタックスエンコーダおよびデコーダを示し、選択するために、コード化ユニットのシンタックス情報を使用するための例示的な方法を示すフローチャートである。概して、コード化ユニットの複数のビデオ・ブロックを符号化することに加えて、およびそれに関連して、ビデオ・エンコーダ20(図1)などのビデオ・エンコーダによって図17のステップ300〜310を実行することができる。コード化ユニットは、ビデオ・フレーム、スライス、またはピクチャ・グループ(「シーケンス」とも呼ばれる)を備えることができる。コード化ユニットの複数のビデオ・ブロックを復号することに加えて、およびそれに関連して、ビデオ・デコーダ30(図1)などのビデオ・デコーダによって図17のステップ312〜316を実行することができる。
【0185】
最初に、ビデオ・エンコーダ20は、フレーム、スライス、またはピクチャ・グループなど、コード化ユニットの様々なサイズのブロックのセットを受信する(300)。本開示の技法によれば、ブロックの1つまたは複数は、16×16ピクセルよりも大きいピクセル、たとえば、32×32ピクセル、64×64ピクセルなどを備えることができる。ただし、ブロックは、それぞれ同数のピクセルを含む必要はない。一般に、ビデオ・エンコーダ20は、同じブロック・ベースのシンタックスを使用してブロックの各々を符号化することができる。たとえば、ビデオ・エンコーダ20は、上記で説明したように、階層コード化ブロック・パターンを使用してブロックの各々を符号化することができる。
【0186】
ビデオ・エンコーダ20は、コード化ユニットのブロックのセット中の最大ブロック、すなわち、最大ブロック・サイズに基づいて、使用すべきブロック・ベースのシンタックスを選択することができる。最大ブロック・サイズは、コード化ユニット中に含まれる最大マクロ・ブロックのサイズに対応し得る。したがって、ビデオ・エンコーダ20はセット中の最大サイズのブロックを判断する(302)。図17の例では、ビデオ・エンコーダ20はまた、セット中の最小サイズのブロックを判断する(304)。上記で説明したように、ブロックの階層コード化ブロック・パターンは、ブロックのパーティションが非ゼロ量子化係数を有するかどうかに対応する長さを有する。いくつかの例では、ビデオ・エンコーダ20は、コード化ユニットのシンタックス情報中に最小サイズ値を含めることができる。いくつかの例では、最小サイズ値は、コード化ユニット中の最小パーティション・サイズを示す。このようにして、最小パーティション・サイズ、たとえば、コード化ユニット中の最小ブロックを使用して、階層コード化ブロック・パターンの最大長さを判断することができる。
【0187】
ビデオ・エンコーダ20は、次いで、最大ブロックに対応するシンタックスに従ってコード化ユニットのセットの各ブロックを符号化する(306)。たとえば、最大ブロックが64×64ピクセルブロックを備えると仮定すると、ビデオ・エンコーダ20は、MB64_typeについて上記で定義したシンタックスなどのシンタックスを使用することができる。別の例として、最大ブロックが32×32ピクセルブロックを備えると仮定すると、ビデオ・エンコーダ20は、MB32_typeについて上記で定義したシンタックスなどのシンタックスを使用することができる。
【0188】
ビデオ・エンコーダ20はまた、コード化ユニット中の最大ブロックとコード化ユニット中の最小ブロックとに対応する値を含むコード化ユニット・シンタックス情報を生成する(308)。ビデオ・エンコーダ20は、次いで、コード化ユニットのシンタックス情報とコード化ユニットのブロックの各々とを含むコード化ユニットをビデオ・デコーダ30に送信する。
【0189】
ビデオ・デコーダ30は、ビデオ・エンコーダ20からコード化ユニットとそのコード化ユニットのシンタックス情報とを受信する(312)。ビデオ・デコーダ30は、コード化ユニット中の最大ブロックのコード化ユニット・シンタックス情報中の指示に基づいてブロック・ベースのシンタックス・デコーダを選択する(314)。たとえば、コード化ユニット・シンタックス情報が、コード化ユニット中の最大ブロックが64×64ピクセルを備えることを示したと仮定すると、ビデオ・デコーダ30はMB64_typeブロックのシンタックス・デコーダを選択することができる。ビデオ・デコーダ30は、次いで、コード化ユニットのブロックに選択されたシンタックス・デコーダを適用して、コード化ユニットのブロックを復号する(316)。ビデオ・デコーダ30はまた、最小符号化パーティションのコード化ユニット・シンタックス情報中の指示に基づいて、ブロックがさらなる個別符号化サブパーティションを有しないときを判断することができる。たとえば、最大ブロックが64×64ピクセルであり、最小ブロックが同じく64×64ピクセルである場合、64×64ブロックは64×64サイズよりも小さいサブパーティションに分割されないと判断され得る。別の例として、最大ブロックが64×64ピクセルであり、最小ブロックが32×32ピクセルである場合、64×64ブロックは32×32以上の大きさのサブパーティションに分割されると判断され得る。
【0190】
このようにして、ビデオ・デコーダ30は、H.264などの既存のコーディング規格との後方互換性を維持することができる。たとえば、コード化ユニット中の最大ブロックが16×16ピクセルを備えるとき、ビデオ・エンコーダ20はコード化ユニット・シンタックス情報中にこれを示すことができ、ビデオ・デコーダ30は標準H.264のブロック・ベースのシンタックス・デコーダを適用することができる。しかしながら、コード化ユニット中の最大ブロックが16×16ピクセルよりも多くのピクセルを備えるとき、ビデオ・エンコーダ20はコード化ユニット・シンタックス情報中にこれを示すことができ、ビデオ・デコーダ30は、コード化ユニットのブロックを復号するために、本開示の技法によるブロック・ベースのシンタックス・デコーダを選択的に適用することができる。
【0191】
1つまたは複数の例では、説明した機能はハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装できる。ソフトウェアで実装する場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶するか、あるいはコンピュータ可読媒体を介して送信することができる。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む、コンピュータ記憶媒体と通信媒体の両方を含む。記憶媒体は、コンピュータによってアクセスできる任意の利用可能な媒体とすることができる。限定ではなく、例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは命令またはデータ構造の形態の所望のプログラムコードを担持または記憶するために使用でき、コンピュータによってアクセスできる任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、ソフトウェアが、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
【0192】
様々な例について説明した。これらおよび他の例は以下の特許請求の範囲の範囲内にある。

【特許請求の範囲】
【請求項1】
ビデオ・エンコーダを用いて、複数のビデオ・ブロックを備えるコード化ユニットを符号化することであって、前記複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、符号化することと、
最大サイズ値を含む前記コード化ユニットのシンタックス情報を生成することであって、前記最大サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、生成することと
を備える方法。
【請求項2】
前記コード化ユニットが、フレーム、スライス、およびピクチャ・グループのうちの1つを備える請求項1に記載の方法。
【請求項3】
前記シンタックス情報が、前記複数のビデオ・ブロックのうちの前記最大ビデオ・ブロックのサイズに対応する固定長符号を備える請求項1に記載の方法。
【請求項4】
前記シンタックス情報を生成することが、前記シンタックス情報中に、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最小ビデオ・ブロックのサイズを示す最小サイズ値を含めることをさらに備える請求項1に記載の方法。
【請求項5】
前記最大サイズ値と前記最小サイズ値とに従って前記複数のビデオ・ブロックの各々についてブロック・ベースのシンタックス情報を生成することをさらに備える請求項4に記載の方法。
【請求項6】
複数のビデオ・ブロックを備えるコード化ユニットを符号化することであって、前記複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、符号化することと、最大サイズ値を含む前記コード化ユニットのシンタックス情報を生成することであって、前記最大サイズ値が前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、生成することとを行うように構成されたビデオ・エンコーダを備える装置。
【請求項7】
前記コード化ユニットが、フレーム、スライス、およびピクチャ・グループのうちの1つを備える請求項6に記載の装置。
【請求項8】
前記シンタックス情報が、前記複数のビデオ・ブロックのうちの前記最大ビデオ・ブロックのサイズに対応する固定長符号を備える請求項6に記載の装置。
【請求項9】
前記ビデオ・エンコーダが、前記シンタックス情報中に、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最小ビデオ・ブロックのサイズを示す最小サイズ値を含めるように構成される請求項6に記載の装置。
【請求項10】
前記ビデオ・エンコーダが、前記最大サイズ値と前記最小サイズ値とに従って前記複数のビデオ・ブロックの各々についてブロック・ベースのシンタックス情報を生成するように構成される請求項9に記載の装置。
【請求項11】
複数のビデオ・ブロックを備えるコード化ユニットを符号化するための手段であって、前記複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、符号化するための手段と、
最大サイズ値を含む前記コード化ユニットのシンタックス情報を生成するための手段であって、前記最大サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、生成するための手段と、
を備える装置。
【請求項12】
前記コード化ユニットが、フレーム、スライス、およびピクチャ・グループのうちの1つを備える請求項11に記載の装置。
【請求項13】
前記シンタックス情報が、前記複数のビデオ・ブロックのうちの前記最大ビデオ・ブロックのサイズに対応する固定長符号を備える請求項11に記載の装置。
【請求項14】
前記シンタックス情報を生成するための前記手段が、前記シンタックス情報中に、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最小ビデオ・ブロックのサイズを示す最小サイズ値を含めるための手段をさらに備える請求項11に記載の装置。
【請求項15】
前記最大サイズ値と前記最小サイズ値とに従って前記複数のビデオ・ブロックの各々についてブロック・ベースのシンタックス情報を生成するための手段をさらに備える請求項14に記載の装置。
【請求項16】
複数のビデオ・ブロックを備えるコード化ユニットを符号化することであって、前記複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、符号化することと、
最大サイズ値を含む前記コード化ユニットのシンタックス情報を生成することであって、前記最大サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、生成することと、
をプログラマブル・プロセッサに行わせるための命令で符号化されたコンピュータ可読記憶媒体。
【請求項17】
前記コード化ユニットが、フレーム、スライス、およびピクチャ・グループのうちの1つを備える請求項16に記載のコンピュータ可読記憶媒体。
【請求項18】
前記シンタックス情報が、前記複数のビデオ・ブロックのうちの前記最大ビデオ・ブロックのサイズに対応する固定長符号を備える請求項16に記載のコンピュータ可読記憶媒体。
【請求項19】
前記シンタックス情報を生成するための前記命令が、前記シンタックス情報中に、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最小ビデオ・ブロックのサイズを示す最小サイズ値を含めるための命令をさらに備える請求項16に記載のコンピュータ可読記憶媒体。
【請求項20】
前記最大サイズ値と前記最小サイズ値とに従って前記複数のビデオ・ブロックの各々についてブロック・ベースのシンタックス情報を生成するための命令をさらに備える請求項19に記載のコンピュータ可読記憶媒体。
【請求項21】
ビデオ・デコーダを用いて、複数のビデオ・ブロックを備えるコード化ユニットを受信することであって、前記複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、受信することと、
最大サイズ値を含む前記コード化ユニットのシンタックス情報を受信することであって、前記最大サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、受信することと、
前記最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択することと、
前記選択されたブロック・タイプ・シンタックス・デコーダを使用して前記コード化ユニット中の前記複数のビデオ・ブロックの各々を復号することと、
を備える方法。
【請求項22】
前記シンタックス情報が最小サイズ値を含み、前記最小サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最小ビデオ・ブロックのサイズを示し、前記選択されたブロック・タイプ・シンタックス・デコーダが、前記最小サイズ値に従って前記コード化ユニット中の前記複数のビデオ・ブロックをどのように復号すべきかを示す、請求項21に記載の方法。
【請求項23】
複数のビデオ・ブロックを備えるコード化ユニットを受信することであって、前記複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、受信することと、最大サイズ値を含む前記コード化ユニットのシンタックス情報を受信することであって、前記最大サイズ値が前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、受信することと、前記最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択することと、前記選択されたブロック・タイプ・シンタックス・デコーダを使用して前記コード化ユニット中の前記複数のビデオ・ブロックの各々を復号することと、を行うように構成されたビデオ・デコーダを備える装置。
【請求項24】
前記シンタックス情報が最小サイズ値を含み、前記最小サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最小ビデオ・ブロックのサイズを示し、前記選択されたブロック・タイプ・シンタックス・デコーダが、前記最小サイズ値に従って前記コード化ユニット中の前記複数のビデオ・ブロックをどのように復号すべきかを示す、請求項23に記載の装置。
【請求項25】
複数のビデオ・ブロックを備えるコード化ユニットを受信するための手段であって、前記複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、受信するための手段と、
最大サイズ値を含む前記コード化ユニットのシンタックス情報を受信するための手段であって、前記最大サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、受信するための手段と、
前記最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択するための手段と、
前記選択されたブロック・タイプ・シンタックス・デコーダを使用して前記コード化ユニット中の前記複数のビデオ・ブロックの各々を復号するための手段と、
を備える装置。
【請求項26】
前記シンタックス情報が最小サイズ値を含み、前記最小サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最小ビデオ・ブロックのサイズを示し、前記選択されたブロック・タイプ・シンタックス・デコーダが、前記最小サイズ値に従って前記コード化ユニット中の前記複数のビデオ・ブロックをどのように復号すべきかを示す、請求項25に記載の装置。
【請求項27】
複数のビデオ・ブロックを備えるコード化ユニットを受信することであって、前記複数のビデオ・ブロックのうちの少なくとも1つが16×16ピクセルよりも大きいサイズを備える、受信することと、
最大サイズ値を含む前記コード化ユニットのシンタックス情報を受信することであって、前記最大サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最大ビデオ・ブロックのサイズを示す、受信することと、
前記最大サイズ値に従ってブロック・タイプ・シンタックス・デコーダを選択することと、
前記選択されたブロック・タイプ・シンタックス・デコーダを使用して前記コード化ユニット中の前記複数のビデオ・ブロックの各々を復号することと
をプログラマブル・プロセッサに行わせるための命令で符号化されたコンピュータ可読記憶媒体。
【請求項28】
前記シンタックス情報が最小サイズ値を含み、前記最小サイズ値が、前記コード化ユニット中の前記複数のビデオ・ブロックのうちの最小ビデオ・ブロックのサイズを示し、前記選択されたブロック・タイプ・シンタックス・デコーダが、前記最小サイズ値に従って前記コード化ユニット中の前記複数のビデオ・ブロックをどのように復号すべきかを示す、請求項27に記載のコンピュータ可読記憶媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2013−85280(P2013−85280A)
【公開日】平成25年5月9日(2013.5.9)
【国際特許分類】
【外国語出願】
【出願番号】特願2012−273380(P2012−273380)
【出願日】平成24年12月14日(2012.12.14)
【分割の表示】特願2011−530142(P2011−530142)の分割
【原出願日】平成21年9月29日(2009.9.29)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】