(54)【発明の名称】ビデオを復号化する方法、ビデオを符号化する方法、デコーダ、エンコーダ、復号プログラムを記録したコンピュータ読み取り可能な記録媒体、および符号化プログラムを記録したコンピュータ読み取り可能な記録媒体
【文献】
Arild Fuldseth et al.,Tiles,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11 6th Meeting: Torino, IT,2011年 7月 1日,[JCTVC-F335] (version 1)
【文献】
Kiran Misra et al.,Tiles for parallel decoding,Joint Collaborative Team on Video Coding (JCT-VC),2011年 3月16日,[JCTVC-E412]
(58)【調査した分野】(Int.Cl.,DB名)
請求項6に記載のデコーダとしてコンピュータを機能させるための復号プログラムであって、前記復号部および前記初期化部としてコンピュータを機能させるための復号プログラムを記録したコンピュータ読み取り可能な記録媒体。
請求項7に記載のエンコーダとしてコンピュータを機能させるための符号化プログラムであって、前記符号化部および前記初期化部としてコンピュータを機能させるための符号化プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明を実施するための形態】
【0010】
エントロピ符号化/復号を使用する任意のビデオ・コーダ/デコーダ(コーデック)が本明細書に記載の実施形態に適合可能であるが、例示的な実施形態を、単に例示の目的のためにH.264/AVCエンコーダとH.264/AVCデコーダに関連させて説明する。多数のビデオ符号化方式は、ブロック・ベースのハイブリッド・ビデオ符号化のアプローチに基づいており、情報源符号化方式は、フレーム間予測とも称されるピクチャ間予測、フレーム内予測とも称されるピクチャ内予測、及び予測残差の変換符号化のハイブリッドである。フレーム間予測は、時間的冗長性を利用するものであり、フレーム内と予測残差の変換符号化は空間的冗長性を利用するものである。
【0011】
図1は、例示的なH.264/AVCビデオ・エンコーダ2を示す。フレームとも称される入力ピクチャ4を、符号化のために供給することができる。予測信号6及び残差信号8が生成され、予測信号6は、フレーム間予測10またはフレーム内予測12のいずれかに基づくものとすることができる。フレーム間予測10は、1つ以上の記憶された、参照フレームとも称される参照ピクチャ16、及び入力フレーム4と参照フレーム16との間の動き推定セクション18の処理によって決定される動き情報19を使用する動き補償セクション14によって決定することができる。フレーム内予測12は、復号信号22を使用してフレーム内予測セクション20によって決定することができる。残差信号8は、予測信号6から入力フレーム4を減算することによって決定することができる。残差信号8は、変換/スケーリング/量子化セクション24によって、変換、スケーリング、量子化され、量子化変換係数26が生成される。復号信号22は、予測信号6を、量子化変換係数26を使用して逆(変換/スケーリング/量子化)セクション30によって生成された信号28に加算して生成することができる。動き情報19と量子化変換係数26を、エントロピ符号化セクション32によって、エントロピ符号化し、圧縮ビデオ・ビットストリーム34に書き込むことができる。例えば参照フレームの一部である出力画像領域38は、エンコーダ2において、再構築されたフィルタ前の信号22を使用してデブロッキング・フィルタ36によって生成されてもよい。この出力フレームは、後続の入力ピクチャを符号化するための参照フレームとして使用することができる。
【0012】
図2は、例示的なH.264/AVCビデオ・デコーダ50を示す。ビットストリームとも称される入力信号52を、復号のために供給することができる。受信したシンボルを、エントロピ復号セクション54によってエントロピ復号し、動き情報56と、イントラ予測情報57と、量子化され、スケーリングされた変換係数58とを生成することができる。動き情報56は、動き補償セクション60によってフレーム・メモリ64に存在する1つ以上の参照フレーム84の一部と組み合わせることができ、そしてフレーム間予測68を生成することができる。量子化され、スケーリングされた変換係数58を、逆量子化し、スケーリングし、逆変換し、復号された残差信号70を生成することができる。残差信号70を、予測信号、すなわちフレーム間予測信号68またはフレーム内予測信号76のいずれかに加算することができる。フレーム内予測情報は、フレーム内予測セクション74によって、現フレームの既に復号された情報72と組み合わされ、加算された信号72を生成することができる。加算された信号72は、デブロッキング・フィルタ80でフィルタ処理し、フィルタ処理された信号82は、フレーム・メモリ64に書き込むことができる。
【0013】
H.264/AVCにおいて、入力ピクチャは、固定サイズのマクロブロックに区分することができ、各マクロブロックは、輝度成分の16×16サンプルと、2つの色差成分の各々8×8サンプルとの矩形のピクチャ領域をカバーする。H.264/AVC標準の復号処理は、マクロブロックの処理単位を規定している。エントロピ・デコーダ54は、圧縮ビデオ・ビットストリーム52のシンタックス要素を構文解析し、それらを多重分離する。H.264/AVCは、2つの異なるエントロピ復号方法、すなわち、CAVLCと呼ばれ、コンテキスト適応切り替え可変長符号のセットの使用に基づく複雑性の低い方式と、CABACと呼ばれ、計算量がより厳しく要求される、コンテキスト・ベースの適応型2値算術符号化の方式と、を指定する。そのようなエントロピ復号方式の両方において、現在のシンボルの復号は、前に正しく復号されたシンボルと、適応的に更新されたコンテキスト・モデルとに依存することができる。更に、例えば、予測データ情報、残差データ情報、異なる色平面などの異なるデータ情報は、一緒に多重化することができる。多重分離は、要素がエントロピ復号されるまで待つことが可能である。
【0014】
エントロピ復号した後に、マクロブロックを、逆量子化及び逆変換を経た残差信号と、フレーム内予測信号またはフレーム間予測信号のいずれかの予測信号とを取得して再構築することができる。ブロック歪みは、復号されたマクロブロックにデブロッキング・フィルタを適用することにより低減できる。典型的には、そのような後続の処理は、入力信号がエントロピ復号された後に開始されるので、エントロピ復号が復号において潜在的ボトルネックとなってしまう。同様に、例えば、H.264/AVCにおけるレイヤー間予測または他のスケーリング可能なコーデックにおけるレイヤー間予測など、代替の予測メカニズムが使用されるコーデックにおいて、エントロピ復号は、デコーダにおける処理の前に行う必要がある場合があるので、エントロピ復号が潜在的ボトルネックとなる。
【0015】
複数のマクロブロックを含む入力ピクチャは、1つまたは数個のスライスに区分することができる。1つのスライスが表すピクチャの領域におけるサンプルの値は、エンコーダとデコーダとで使用した参照ピクチャが同一であり、デブロッキング・フィルタリングがスライスの境界を越えた情報を使用しない場合、他のスライスからのデータを使わずに、適切に復号され得る。それ故に、1つのスライスに対するエントロピ復号とマクロブロックの再構築は、他のスライスに依存しない。特に、エントロピ復号状態は、各スライスの開始時にリセットしてもよい。エントロピ復号及び再構築の両方について、近傍の利用可能性を定義する時に、他のスライスのデータは、利用不可とマークすることができる。スライスは、並列に、エントロピ復号され、再構築することが可能である。イントラ予測及び動きベクトル予測は、好ましくは、スライスの境界を越えることは許可されない。これに対し、デブロッキング・フィルタリングは、スライス境界をまたがる情報を使用することができる。
【0016】
図3は、水平方向に11個のマクロブロックと垂直方向に9個のマクロブロックとを含む例示的なビデオ・ピクチャ90を示す(9個の例示的なマクロブロックには91〜99とラベルが付けられている)。
図3には、例示的な3つのスライスが示されており、第1のスライスは「スライス#0」100と示され、第2のスライスは「スライス#1」101と示され、第3のスライスは「スライス#2」102と示されている。H.264/AVCデコーダは、3つのスライス100、101、102を並列に復号し、再構築することが可能である。各スライドは、逐次方式で走査線順に送信することができる。各スライスの復号/再構築の処理の開始時に、コンテキスト・モデルは、初期化またはリセットされ、他のスライスのマクロブロックは、エントロピ復号及びマクロブロック再構築の両方に対して利用不可とマークされる。従って、あるマクロブロック、例えば、「スライス#1」内の93とラベルが付いたマクロブロックに対して、「スライス#0」内のマクロブロック(例えば、91及び92とラベルが付けられたマクロブロック)は、コンテキスト・モデルの選択または再構築に使用できない。一方、あるマクロブロック、例えば、「スライス#1」内の95とラベルが付いたマクロブロックに対して、「スライス#1」内の他のマクロブロック(例えば、93及び94とラベルが付けられたマクロブロック)は、コンテキスト・モデルの選択または再構築に使用できる。従って、エントロピ復号及びマクロブロック再構築は、1つのスライス内において、逐次進行する。スライスがフレキシブル・マクロブロック順序(FMO)を使用して定義されていない限り、スライス内のマクロブロックは、ラスター走査の順序で処理される。
【0017】
フレキシブル・マクロブロック順序は、ピクチャがスライスに区分される方法を変更するためにスライス・グループを定義する。スライス・グループ内のマクロブロックは、マクロブロック対スライス・グループのマップで定義され、それは、スライス・ヘッダー内のピクチャ・パラメータ・セットの内容及び追加情報によって通知される。マクロブロック対スライス・グループのマップは、ピクチャ内の各マクロブロックに対するスライス・グループ識別番号から構成される。スライス・グループ識別番号は、関連するマクロブロックが属するスライス・グループを規定する。各スライス・グループは、1つ以上のスライスに区分することができ、1つのスライスは、同じスライス・グループ内のマクロブロックのシーケンスであり、該シーケンスは、特定のスライス・グループのマクロブロックのセット内でラスター走査の順序で処理される。エントロピ復号及びマクロブロック再構築は、1つのスライス・グループ内で逐次進行する。
【0018】
図4は、3つのスライス・グループへのマクロブロックの割り当ての例示を示し、第1のスライス・グループは、「スライス・グループ#0」103と表され、第2のスライス・グループは、「スライス・グループ#1」104と表され、第3のスライス・グループは、「スライス・グループ#2」105と表されている。これらのスライス・グループ103、104、105は、ピクチャ90において、それぞれ、2つの前景領域と1つの背景領域とに関連するようにしてもよい。
【0019】
ピクチャは、1つ以上の再構築スライスに区分することが可能で、再構築スライスは、エンコーダとデコーダとで使用された参照ピクチャが同一である場合、その再構築スライスが表すピクチャの領域のサンプルの値が他の再構築スライスからのデータを使わずに正しく再構築できるという意味で、自己完結型であり得る。再構築スライス内の全ての再構築マクロブロックは、再構築のための近傍の定義付けに利用可能であってもよい。
【0020】
再構築スライスは、2つ以上のエントロピ・スライスに区分することが可能で、エントロピ・スライスは、エントロピ・スライスが表すピクチャの領域におけるシンボル値が他のエントロピ・スライスからのデータを使わずに、正しくエントロピ復号できるという意味で、自己完結型であり得る。エントロピ符号化状態は、各エントロピ・スライスの復号開始時にリセットすることができる。他のエントロピ・スライスのデータは、エントロピ復号のために近傍の利用可能性を定義する際に、利用不可とマークすることが可能である。他のエントロピ・スライスのマクロブロックは、現在のブロックのコンテキスト・モデルの選択に使用できない。コンテキスト・モデルは、エントロピ・スライス内においてのみ更新可能である。従って、エントロピ・スライスに関連した各エントロピ・デコーダは、それ自体のコンテキスト・モデルのセットを維持するとよい。
【0021】
エンコーダは、再構築スライスをエントロピ・スライスに区分するか否かを決定し、その決定をビットストリーム中で通知することができる。その信号は、「entropy_slice_flag」と示すことができるエントロピ・スライス・フラグを含むことができる。
図5を参照して、エントロピ・スライス・フラグを調べることができ(130)、エントロピ・スライス・フラグが、ピクチャまたは再構築スライスに関連したエントロピ・スライスが無い(132)ことを示す場合、ヘッダーは、通常のスライス・ヘッダーとして構文解析することができる(134)。エントロピ・デコーダ状態は、リセットすることが可能で(136)、エントロピ復号及び再構築のための近傍情報を定義することができる(138)。次いで、スライス・データをエントロピ復号することができ(140)、スライスを再構築することが可能である(142)。エントロピ・スライス・フラグが、ピクチャと関連したエントロピ・スライスまたは再構築スライスがある(146)ことを示す場合、ヘッダーは、エントロピ・スライス・ヘッダーとして構文解析することができる(148)。エントロピ・デコーダ状態は、リセットすることが可能で(150)、エントロピ復号のための近傍情報を定義することができ(152)、エントロピ・スライス・データを、エントロピ復号することができる(154)。次いで、再構築のための近傍情報を定義することが可能で(156)、スライスを再構築することができる(142)。スライスの再構築(142)後、次のスライスまたはピクチャが分析されてもよい(158)。
【0022】
図6を参照して、デコーダは、並列復号が可能であり、それ自体の並列性の度合いを定義することができ、例えば、並列にN個のエントロピ・スライスを復号する能力を備えるデコーダを考慮する。このデコーダは、N個のエントロピ・スライスを識別することができる(170)。現在のピクチャまたは再構築スライスにおいて、N個より少ないエントロピ・スライスが利用可能である場合、デコーダは、後続のピクチャまたは再構築スライスからのエントロピ・スライスを、それらが利用可能であれば、復号することが可能である。あるいは、デコーダは、現在のピクチャまたは再構築スライスが完全に処理されるまで待って、その後、後続のピクチャまたは再構築スライスの部分を復号してもよい。最大N個のエントロピ・スライスの識別(170)後、識別されたエントロピ・スライスの各々を、独立にエントロピ復号してもよい。第1のエントロピ・スライスを復号することができる(172〜176)。第1のエントロピ・スライの復号(172〜176)は、デコーダ状態のリセット(172)を含むことが可能である。CABACエントロピ復号が使用される場合、CABAC状態をリセットすることができる。第1のエントロピ・スライスのエントロピ復号のための近傍情報を定義することができ(174)、第1のエントロピ・スライス・データを復号することが可能である(176)。最大N個までのエントロピ・スライスの各々に対して、これらのステップを実行することができる(N番目のエントロピ・スライスに対して178〜182)。エントロピ・スライスの全部または一部がエントロピ復号されると、デコーダは、エントロピ・スライスを再構築することができる(184)。
【0023】
エントロピ・スライスがN個より多い場合、復号スレッドは、1個のエントロピ・スライスのエントロピ復号完了後に、次のエントロピ・スライスのエントロピ復号を開始することができる。従って、スレッドが低複雑性のエントロピ・スライスのエントロピ復号を終了すると、そのスレッドは他のスレッドの復号の終了を待たずに、別のエントロピ・スライスの復号を開始することができる。
【0024】
図3に示すように、スライスの配置は、ラスター走査またはラスター走査順序としても知られている画像の走査順序に並んだ一対のマクロブロックの間に、各スライスを定義することに限定することができる。この走査順のスライスの配置は、計算効率は良いが、高効率の並列符号化と並列復号には適さない傾向がある。更に、このスライスの走査順序の定義は、符号化効率に非常に適した共通の特性を持っている可能性が高い、画像のより小さな局所領域をグループにしない傾向がある。
図4に示したようなスライスの配置は、その配置において柔軟性は高いが、高効率の並列符号化と並列復号には適さない傾向がある。更に、この非常に柔軟なスライスの定義は、デコーダに実装するためには、計算上複雑である。
【0025】
図7を参照すると、あるタイル方式では、画像が矩形(正方形を含む)領域のセットに分割されている。タイルの各々の中のマクロブロック(例えば、最大符号化単位)は、ラスター走査順序に符号化され、復号される。タイルの配置も同様に、ラスター走査順序に符号化され、復号される。従って、任意の適切な数(例えば、0以上)の列の境界があってもよいし、任意の適切な数(例えば、0以上)の行の境界があってもよい。従って、
図7で示されている1つのスライスのように、フレームは、1つ以上のスライスを定義することが可能である。幾つかの実施形態において、異なるタイルに位置するマクロブロックは、近傍マクロブロック情報に依存する、イントラ予測、動き補償、エントロピ符号化コンテキスト選択または他の処理に利用可能ではない。
【0026】
図8を参照すると、このタイル方式では、画像が3個の矩形列のセットに分割されて示されている。タイルの各々の中のマクロブロック(例えば、最大符号化単位)は、ラスター走査順序に符号化され、復号される。タイルも、同様にラスター走査順序で符号化され、復号される。1つ以上のスライスをタイルの走査順序で定義することができる。スライスの各々は独立に復号可能である。例えば、スライス1は、マクロブロック1〜9を含むように定義することができ、スライス2は、マクロブロック10〜28を含むように定義することができ、スライス3は、3個のタイルに跨るマクロブロック29〜126を含むように定義することができる。タイルの使用により、フレームの、より局部的な領域のデータを処理することによって、符号化効率が促進される。
【0027】
1つの実施形態において、エントロピ符号化・復号処理は、各タイルの開始時に初期化される。エンコーダにおいて、この初期化には、エントロピ・エンコーダ内の残りの情報をビットストリームに書き込む、フラッシングとして知られる処理と、あらかじめ定義され設定されたビットストリーム位置の1つに到達するために、ビットストリームに追加のデータをパディングする処理と、エントロピ・エンコーダを、所定の、またはエンコーダ及びデコーダの両方に知られている既知の状態に設定する処理とを含めることができる。多くの場合、既知の状態は、値のマトリックスの形である。更に、所定のビットストリームの位置は、ビットの倍数でアラインされた、すなわち、バイト・アラインされた位置とすることができる。デコーダにおいて、この初期化処理は、エントロピ・デコーダを、エンコーダ及びデコーダの両方に知られている既知の状態に設定し、ビットストリーム内のビットを、あらかじめ定義され設定されたビットストリーム位置を読み込むまで、無視する処理を含んでもよい。
【0028】
幾つかの実施形態において、複数の既知の状態が、エンコーダとデコーダに対して利用可能であり、エントロピ符号化処理及び/またはエントロピ復号処理の初期化に使用することができる。従来から、初期化に使われる既知の状態は、エントロピ初期化インジケータ値を有するスライス・ヘッダーで通知されている。
図7及び
図8で示したタイル方式では、タイルとスライスとは互いにアラインされていない。従って、タイルとスライスとがアラインされていないので、従来は、スライス内の最初のマクロブロックと同一の位置にある、ラスター走査順序で最初のマクロブロックを含まないタイルに対して、エントロピ初期化インジケータ値は、送信されることはない。例えば、
図7を参照すると、マクロブロック1は、スライス・ヘッダーで送信されるエントロピ初期化インジケータ値を使用して初期化されるが、次のタイルのマクロブロック16に対して、同様なエントロピ初期化インジケータ値は無い。通常、同様なエントロピ初期化インジケータ情報は、単一のスライス(マクロブロック1に対するスライス・ヘッダーを有する)のタイルに対応するマクロブロック34、43、63、87、99、109、及び121に対して、存在しない。
【0029】
図8を参照すると、エントロピ初期化インジケータ値は、3つのスライスに対して同様に、スライス1のマクロブロック1に対するスライス・ヘッダーの中に提供され、スライス2のマクロブロック10に対するスライス・ヘッダーの中に提供され、スライス3のマクロブロック29に対するスライス・ヘッダーの中に提供されている。しかしながら、
図7と同様の形で、エントロピ初期化インジケータ値が、中央のタイル(マクロブロック37から始まっている)及び右側のタイル(マクロブロック100から始まっている)には欠如している。中央及び右側のタイルに対してエントロピ初期化インジケータ値が無ければ、タイルのマクロブロックを、並列方式で高い符号化効率により効果的に符号化及び復号するのに問題がある。
【0030】
1つのフレーム内に1つ以上のタイル及び1つ以上のスライスを使用しているシステムでは、エントロピ初期化インジケータ値をタイルの最初のマクロブロック(例えば、最大符号化単位)と共に提供するのが好ましい。
図7のマクロブロック16と共に、エントロピ初期化インジケータ値がエントロピ初期化情報を明示的に選択するために提供されている。その明示的決定には、いかなる適切な方式を使ってもよく、例えば、前のスライス・ヘッダー等の中にある前のエントロピ初期化インジケータ値を使用すべきであるということを示すこと、または、そうでなければ、それぞれのマクロブロック/タイルに関連付けられたエントロピ初期化インジケータ値を送信することが可能である。このように、スライスにエントロピ指標値を含むヘッダーを含めることを可能にしながら、タイルの最初のマクロブロックにも同様にエントロピ初期化インジケータ値を含めることができる。
【0031】
図9Aを参照して、この追加情報の符号化は次のようであってもよい。
If (num_column_minus1>0 && num_rows_min1>0)
then
tile_cabac_init_idc_present_flag
【0032】
num_column_minus1>0は、タイル内の列の数が0でないかを決定し、num_rows_min1>0は、タイル内の行の数が0でないかを決定し、両者は実質的に、タイルが符号化/復号で使用されているかを決定する。タイルが使用されている場合、tile_cabac_init_idc_present_flagは、エントロピ初期化インジケータ値がエンコーダからデコーダに伝えられる方法を示すフラグである。例えば、フラグが第1の値に設定されている場合、前に送られたエントロピ初期化インジケータ値を使用するというような第1のオプションを選択することができる。具体的な例として、この前に送られたエントロピ初期化インジケータ値は、タイルの最初のマクロブロックを含んでいるスライスに対応するスライス・ヘッダーで送信されたエントロピ初期化インジケータ値に等しくすることが可能である。例えば、フラグが第2の値に設定されている場合、エントロピ初期化インジケータ値が、対応するタイルのビットストリームの中に提供されるというような第2のオプションが選択されてもよい。具体的な例として、エントロピ初期化インジケータ値は、タイルの最初のマクロブロックに対応するデータの中に提供される。
【0033】
エントロピ初期化インジケータ値がエンコーダからデコーダに伝えられる方法を示すフラグを通知するシンタックスは、次のようにすることができる。
【0035】
図9Bを参照して、シーケンス・パラメータ・セット(例えば、フレームのシーケンスに関する情報)及び/またはピクチャ・パラメータ・セット(例えば、特定のフレームに関する情報)に含まれるフラグのような他の方式が、タイルが使用されているかを決定するために使われてもよい。
【0036】
シンタックスは、次のようにすることができる。
【0038】
tile_enable_flagは、タイルが現在のピクチャで使用されているかを決定する。
【0039】
図10Aと10Bを参照して、タイルに対する適切なエントロピ初期化インジケータ値情報を提供する方式は次のようにすることができる。
【0040】
第1に、マクロブロック(例えば、符号化単位)が、タイルにおける最初のマクロブロックであるかどうかを確認する。それ故、この方式は、エントロピ初期化インジケータ値を含む可能性があるタイルの最初のマクロブロックを決定する。
図7を参照すると、これは、マクロブロック1、16、34、43、63、87、99、109、及び121を指している。
図8を参照すると、これは、マクロブロック1、37及び100を指している。
【0041】
第2に、タイルの最初のマクロブロック(例えば、符号化単位)が、スライスの最初のマクロブロック(例えば、符号化単位)でないことを確認する。それ故、この方式は、スライス内のさらなるタイルを識別する。
図7を参照すると、これは、マクロブロック16、34、43、3、87、99、109、及び121を指している。
図8を参照すると、これは、マクロブロック37及び100を指している。
【0042】
第3に、tile_cabac_init_idc_flagが第1の値に等しいかどうか、且つタイルが有効かどうかを確認する。1つの特定の実施形態では、この値は0に等しい。第2の実施形態では、この値は1に等しい。更なる実施形態では、(num_column_min1>0 && num_rows_min1>0)の場合、タイルは有効化される。別の実施形態では、tile_enable_flagが1に等しい場合に、タイルは有効化される。
【0043】
そのように識別されたマクロブロックに対して、tile_cabac_init_idc_present_flagを設定することができる。
【0044】
次いで、システムは、tile_cabac_init_idc_flagが存在し、且つ(num_column_minus1>0 && num_rows_min1>0)である場合にのみ、tile_cabac_init_idc_present_flagの信号を送ればよい。それ故、システムは、タイルが使用されていて、フラグが、エントロピ情報が送信されていること(すなわち、cabac_init_idc flag)を示す場合のみ、エントロピ情報を送信する。
【0045】
符号化シンタックスは、次のようにすることができる。
【0047】
一般的に、スライスの最初のマクロブロックに関連していないタイルの最初のマクロブロック(例えば、符号化単位)に関連する1つ以上のフラグが、エントロピ初期化インジケータ値を定義することができる。フラグは、エントロピ初期化インジケータ値が前に提供された情報であるか、デフォルト値であるか、または提供されることになっているエントロピ初期化インジケータ値であるかを示すことができる。
【0048】
再び
図7を参照する。デコーダは、ピクチャ・フレーム内のマクロブロック16の位置を知ってはいるが、エントロピ復号が原因で、マクロブロック15がエントロピ復号されるまで、ビットストリームの中の、マクロブロック16を記述するビットの位置が分からない。復号を行って次のマクロブロックを識別するこのやり方は、ビットのオーバヘッドが小さく保たれ、好ましい。しかしながら、タイルを並列に復号することには役立たない。フレームの中の特定のタイルに対してビットストリームの中の特定の位置を識別する能力を高めて、エントロピ復号の完了を待たずに、異なるタイルをデコーダで同時に並列に復号できるようにするために、ビットストリームの中でのタイルの位置を識別する信号をビットストリームの中に含めることが可能である。
図11を参照する。ビットストリームの中でのタイルの位置の通知は、スライスのヘッダーで提供されるのが好ましい。フラグが、ビットストリームの中でのタイルの位置がスライス内で送信されていることを示す場合、スライス内のタイル(群)それぞれの最初のマクロブロックの、スライス内での位置に加えて、フレーム内のそのようなタイルの数を含むことも好ましい。更に、所望であれば、選択されたタイルのセットに対してのみの位置情報が含まれてもよい。
【0049】
符号化シンタックスは、次のようにすることができる。
【0051】
タイル位置がビットストリームの中に送信されているかどうかを、tile_locations_flagで通知する。tile_offset[i]は、絶対位置値または差分サイズ値(前に符号化されたタイルに対してのタイル・サイズの相違)または任意の適切な方式を使って、通知することができる。
【0052】
この方式は、オーバヘッドは小さいが、エンコーダは、一般的には、全てのタイルが符号化されるまでビットストリームを送信できない。
【0053】
幾つかの実施形態では、連続するタイルの、最大値とも称される最大絶対位置値または最大差分サイズ値に関するデータを含むのが好ましい。そのような情報により、エンコーダは、識別された最大値をサポートするために必要なビット数だけを送信でき、デコーダは、識別された最大値をサポートするために必要なビット数だけを受信できる。例えば、比較的小さい最大値に対しては、タイル位置情報には小さいビット深度のみが必要となる。例えば、比較的大きい最大値に対しては、タイル位置情報には大きいビット深度が必要となる。
【0054】
エントロピ復号を待たずに、デコーダにおいて異なるタイルを並列に処理できるように、異なるタイルを識別する能力を高める別の方式として、各タイルの開始に関連付けられた、ビットストリーム内のマーカーを使用してもよい。これらのタイル・マーカーは、ビットストリームのその特定の部分のエントロピ復号を待たないで、識別されるように、ビットストリーム内に含まれる。一実施形態では、マーカーは、0×000001で始まり、別の実施形態では、マーカーは、0×000002で始まり、別の実施形態では、マーカーは、0×000004または任意の他の適切なビットのシーケンスで始まる。更にマーカーは、タイル及び/またはタイルの最初のマクロブロックに関連付けられた追加のヘッダーを含むことができる。この方法で、結果としてビット・レートは増加するが、エンコーダは、全てのタイルが符号化されるのを待たずに、符号化後に各タイルをビットストリームに書き込むことができる。更に、バッファリングと併せて使用される場合は特に、デコーダは、より効率的な方法でビットストリームを構文解析し、異なるタイルを識別できる。
【0055】
タイル・ヘッダーは、スライス・ヘッダーと同様であるが、典型的には、より少ない情報が含まれている。必要となる主要な情報は、次のブロックのマクロブロック番号とエントロピ初期化データとスライス指標(タイル内の最初の符号化単位(CU:coding
unit)が属するスライスを示す)である。そのようなタイル・ヘッダーの符号化シンタックスは、
図12Aに示したようなものでもよい。あるいは、主要な情報には、初期量子化パラメータも含めることができる。そのようなタイル・ヘッダーの符号化シンタックスは、
図12Bに示したようなものでもよい。スライス・ヘッダーで送信されず、且つタイル・ヘッダーにない値は、スライス・ヘッダーに送信された値にリセットすることができる。
【0056】
幾つかの実施形態では、マーカーは、ビットストリームに含まれ、タイルの開始部に関連付けられる。しかしながら、マーカーは、ビットストリーム内のすべてのタイルに含まれていなくてもよい。これは、エンコーダ及びデコーダが異なるレベルの並列処理で動作することを容易にする。例えば、エンコーダは、ビットストリームには4つのマーカーしか含まなくても、64個のタイルを使用できる。これにより、64の処理を並列に符号化することが可能になり、4つの処理を並列に復号することが可能になる。幾つかの実施形態では、ビットストリーム内のマーカーの数は、エンコーダとデコーダの両方に知られている方法で規定される。例えば、マーカーの数は、ビットストリーム内で通知することも、プロファイルまたはレベルで定義することもできる。
【0057】
幾つかの実施形態では、位置データがビットストリームの中に含められ、タイルの開始部に関連付けられている。しかしながら、位置データは、ビットストリーム内のすべてのタイルに含まれていなくてもよい。これは、エンコーダ及びデコーダが異なるレベルの並列処理で動作することを容易にする。例えば、エンコーダは、ビットストリームには4つの位置しか含まなくても、64個のタイルを使用できる。これは、64の処理を並列に符号化することを可能にし、4つの処理を並列に復号することを可能にする。幾つかの実施形態では、ビットストリーム内の位置の数は、エンコーダ及びデコーダの両方に知られている方法で指定される。例えば、位置の数は、ビットストリーム内で通知することも、プロファイルまたはレベルで定義することもできる。
【0058】
図13を参照して、タイルの開始を明示的に識別する1つの例示的方式を示す。タイル指標の値が初期化され(TileIdx=0)、前のタイル位置の値が初期化され(PreviousLocation=0)、前のタイル・サイズの値が初期化され(PreviousTileSize=0)、タイルの数の値が初期化される(TileCount=(num_columns_minus1+1)*(num_rows_minus1+1)(300)。タイル・データは、タイルの最初の最大符号化単位(LCU)のビットストリームに書き込まれ(310)、それは、典型的には、ピクチャの先頭において、左上側の角のLCUである。タイル・データは、タイル内の画素値を再構築するために必要なデータである。書き込まれるべき別のタイルがある場合(320)、値のセットを修正することができる。タイルの内の最大符号化単位の数を示す現在のタイル・サイズを更新することができる(CurrentTileSize = CurrentLocation − PreviousLocation)(330)。ここで、CurrentLocationは、ビットストリーム内の現在のタイルの開始の位置である。別の実施形態では、現在のタイル・サイズは、タイル内の符号化単位の数を表すように更新することができる。現在のタイル・サイズと前のタイル・サイズの間のオフセットを表すタイル差分オフセット(340)は、更新することができる。前の位置は、現在の位置に設定することができ(PreviousLocation = CurrentLocation)、前のタイル・サイズは、現在のタイル・サイズに設定することができ(PreviousTileSize = CurrentTileSize)、タイル指標は、インクリメントすることができる(TileIdx = TileIdx + 1)(350)。次のタイルの最初のLCUは、データと共に書き込むことができる(310)。この再帰的な処理が、スライス内に書き込まれるべき追加のタイルがなくなる(335)まで、繰り返される。
【0059】
タイル数が1より大きい場合(TileCount>1)(360)、タイル位置情報フラグの存在が設定される(TileLocationInformationPresentFlag = .T.)(370)。更に、例えば、TileLocationInformationPresentFlag、TileDifferentialOffset[0]、TileDifferentialOffset[1]、・・・、TileDifferentialOffset[NumberOfTilesMinus1]を含む値のセットが書き込まれてもよい(380)。ここに、NumberOfTilesMinus1は、TileCountー1に等しい。幾つかの実施形態では、値のセットは、スライス・ヘッダーに書き込まれる(380)。タイルが1つだけ存在する場合(360)、タイルに関係する追加のデータの格納はスキップされる(385)。幾つかの実施形態では、TileDifferentialOffsetは、現在のスライス内のタイル・サイズを表す。
【0060】
図14を参照して、タイルの開始を黙示的に識別する例示的な方式を示す。タイル指標の値が初期化され(TileIdx=0)、前のタイル位置が初期化され(PreviousLocation=0)、前のタイル・サイズが初期化される(PreviousTileSize=0)(400)。タイル・データは、タイルの最初の最大符号化単位(LCU)のビットストリームに書き込まれ(410)、それは、典型的には、ピクチャの先頭において、左上側の角のLCUである。書き込まれるべき別のタイルが存在する場合(420)、値のセットがタイルの符号化単位に書き込まれる(425)。書き込まれる値(425)は、マーカー及び/またはタイル・ヘッダー情報を含んでもよく、タイル・ヘッダーは、lightweight_slice_flagまたは等価なものを有するスライス・ヘッダーであってもよい。タイル・ヘッダー情報は、例えば、最大符号化単位アドレスと、スライス指標と、量子化パラメータ情報とを含んでもよい。次のタイルの最初のLCUは、データと共に書き込まれる(410)。この再帰的な処理が、スライス内に書き込まれるべき追加のタイルがなくなる(430)まで、繰り返される。タイル開始位置の黙示的及び/または明示的な通知は、ビットストリームの中に含まれていると理解されたい。
【0061】
図15を参照して、タイル・ヘッダーは、LCUアドレス、スライス指標及び/または量子化パラメータ情報に加えて、1つ以上のタイル指標値を含むことができる。LCUアドレスは、タイル指標値TileIdxで置き換えられる場合がある。スライス指標は、ビットストリーム内で前に送信されたスライス・パラメータ・セットを指すスライス・パラメータ・セット指標で置き換えられる場合がある。スライス・パラメータ・セットは、量子化パラメータ、エントロピ・コーダ初期化パラメータ、参照リスト・パラメータ、またはループ・フィルタ・パラメータに対する値を含むことができるが、それに限定されない。タイル指標値は、例えば、タイル指標マイナス1のような、任意の適切な値とすることができる。この方法で、最初のタイルに番号0を付け、順次タイルに番号を付ける。タイル指標値を含むことにより、タイルの復号は、計算上の複雑性がより低下する。本発明の幾つかの実施形態では、タイル指標値は、ビットストリームまたはスライスの中の最初のタイルに対応しないタイル・ヘッダーにのみ存在する。
【0062】
更に、特定のスライスに対して、スライス・ヘッダー内の現在の情報またはスライス・ヘッダー内の前に送信された情報のどちらを使うかを表すフラグがタイル・ヘッダーに含まれていてもよい。これは、システムの計算上の複雑性を更に低減すると共にビットストリームのビット・レートも低減する。
【0063】
本発明の1つの実施形態では、フラグの存在は、ビットストリーム内においてslice_parameter_set_present_flagで表されてもよい。slice_parameter_set_present_flagのシンタックスは、次のようであってもよい。
【0065】
slice_parameter_set_present_flagは、スライス・パラメータ・セットが送信されているかをビットストリーム内で通知する。1つの例示的シンタックスは、ピクチャ・パラメータ・セットに対してである。スライス・パラメータ・セット指標は、slice_parameter_set_present_flagが、スライス・パラメータ・セットがビットストリーム内で送信されていることを表す場合にのみ、ビットストリーム内で送信される。「slice_parameter_set_present_flag」が存在し、且つTRUE値に設定されている場合、slice_parameter_set_flagが通知される。「slice_parameter_set_present_flag」が存在し、且つFALSE値に設定されている場合、slice_parameter_set_flagが通知されない。幾つかの実施形態では、「slice_parameter_set_present_flag」がFALSE値に設定されている時、前に送信されたスライス・ヘッダーからの情報が使用される。幾つかの実施形態では、TRUE値は1に等しい場合がある。幾つかの実施形態では、FALSE値は0に等しい場合がある。以下に説明するように、この処理は、フラグslice_parameter_set_flagによって通知されたときに、幾つかのタイル・ヘッダーに対して、スキップしてもよい。本発明の幾つかの実施形態では、フラグslice_parameter_set_flagは、真値であると推測される。
【0066】
図16を参照して、タイル・ヘッダーは、スライス・パラメータ・セット指標値を含んでもよい。スライス・パラメータ・セット指標値は、前に送信されたスライス・ヘッダー内の情報である、スライス・パラメータ・セットの中の1つ以上のセットを指してもよい。スライス・パラメータ・セットの各々は、例えば、量子化パラメータ(QP)、コンテキスト・ベースの適応型2値算術符号化情報(cabac_init_idc)、参照ピクチャ・リスト修正、またはループ・フィルタ情報を含んでもよい。ループ・フィルタ情報は、典型的に、例えば、適応型ループ・フィルタ情報、サンプル適応型オフセット情報、デブロッキング・フィルタ情報を含む。
【0067】
例示的なタイル・ヘッダーのシンタックスは、次のようである。
【0069】
slice_parameter_set_idは、スライス・パラメータ・セット指標値を表し、前に送信されたビットストリーム内の特定のスライス・パラメータ・セットを指す。
図16は、2つの異なるタイル・ヘッダーが、2つの異なるslice_parameter_set_idをどのように含み、前に送信されたビットストリーム内の2つの異なるスライス・パラメータ・セットをどのように参照するか、を示す。
【0070】
tile_idxー1は、タイル指標マイナス1を指定することができる。tile_idx−1は、符号なし数とすることができる。tile_idxー1は、vビットを使うことができ、vはピクチャ内のタイルの最大数に基づいて決められる。例えば、vは、RoundAbove(log2(TileCountー1))として計算することができる。ここで、RoundAbove(x)は、xに等しいかまたはxより大きい最初の整数値に丸めることを表す。
【0071】
前に述べたように、slice_parameter_set_flagは、slice_parameter_set_idがビットストリーム内で送信されているかどうかを指定する。slice_parameter_set_flagが第1の値である場合、slice_parameter_set_idは、ビットストリームで送信されておらず、既存のアクティブなスライス・パラメータ・セットがタイルに対して使用される。1つの実施形態では、アクティブなスライス・パラメータ・セットは、前のタイルで使われたスライス・パラメータ・セットである。第2の実施形態では、アクティブなスライス・パラメータ・セットは、前のタイルの中の最後の符号化単位によって使用されたスライス・パラメータ・セットである。slice_parameter_set_flagが、第2の値の場合、slice_parameter_set_idがビットストリーム内で送信される。1つの実施形態では、第1と第2の値は、それぞれ、0及び1である。
【0072】
slice_parameter_set_idは、タイルによって参照されるスライス・パラメータ・セット識別子を指定する。
【0073】
図17を参照して、フラグを、タイルの終端を示すためにタイルの終端に含めてもよい。この方法で、タイルの終端を決定することに関する計算上の複雑さを簡単にできる。
【0074】
幾つかのケースで、本記載は、スライス及び/またはタイルに適したデータを有するビットストリームを生成する方式を例示した。この情報が適切な方法でビットストリーム内に含まれていることによって、デコーダは、このデータを、同様に受信し、ビットストリームをより効果的に復号するために使用できる。
【0075】
前述の明細書において用いた用語および表現は、限定ではなく説明のための用語としてその中で使用されており、そのような用語および表現の使用において、図示及び説明した特徴またはその一部の等価物を排除する意図はなく、本発明の範囲は以下の特許請求の範囲によってのみ規定され限定されることが分かる。