(57)【要約】【課題】バイナリ情報（たとえば、スキップマクロブロック情報）を（たとえば、ビデオエンコーダ／デコーダ内で）符号化し、かつ復号するための技法およびツールを提供する。【解決手段】いくつかの実施形態において、バイナリ情報は、ビットプレーン内に配置され、ビットプレーンは、ピクチャ／フレーム層でコード化される。エンコーダ／デコーダは、このバイナリ情報を処理し、いくつかの実施形態において、コード化モードを切り換える。たとえば、エンコーダ／デコーダは、ノーマルモード、行スキップモード、列スキップモード、または差分モード、あるいは他のモードおよび／または追加のモードを使用する。いくつかの実施形態において、エンコーダ／デコーダは、動きがその因果的に予測された動きに等しい、また、残留誤差がゼロである予測マクロブロックとして、スキップマクロブロックを規定する。いくつかの実施形態において、エンコーダ／デコーダは、非圧縮コード化モードを使用し、低遅延応用例を可能にする。【選択図】図２８
2010283893.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスにおいてビデオを復号する方法であって、
ビットストリーム内の圧縮済みビデオ情報を受信するステップであって、前記圧縮済みビデオ情報はコード化モード選択構文要素を含むステップと、
前記圧縮済みビデオ情報を使用してビデオフレームを復号するステップであって、前記ビデオフレームは複数のマクロブロックを含み、バイナリ情報は前記複数のマクロブロックの特徴を表し、前記バイナリ情報は前記複数のマクロブロックの各々について１つのバイナリシンボルを含み、
前記コード化モード選択構文要素に基いて、複数の適用可能なコード化モードの中から１つのコード化モードを選択するステップと、
前記選択されたコード化モードが前記複数の適用可能なコード化モードの第１のコード化モードである場合、前記複数のマクロブロックの各々について、マクロブロック当たり１つの構文要素を使用して前記マクロブロックの前記バイナリ情報を決定するステップと、
そうでない場合、前記複数の適用可能なコード化モードの第２のコード化モードにしたがって前記複数のマクロブロックの前記バイナリ情報を決定するステップであって、前記第２のコード化モードは、１つのコードが前記複数のマクロブロックの２つまたはそれ以上の前記バイナリ情報を示すことを許すステップと
を含む前記復号するステップと
を備えたことを特徴とする方法。
【請求項２】
コンピューティングデバイスにおいてビデオを符号化する方法であって、
ビデオフレームを符号化するステップであって、前記ビデオフレームは複数のマクロブロックを含み、バイナリ情報は前記複数のマクロブロックの特徴を表し、前記バイナリ情報は前記複数のマクロブロックの各々について１つのバイナリシンボルを含み、
複数の適用可能なコード化モードの中から１つのコード化モードを選択するステップと、
前記選択されたコード化モードが前記複数の適用可能なコード化モードの第１のコード化モードである場合、前記複数のマクロブロックの各々について、マクロブロック当たり１つの構文要素を使用して前記マクロブロックの前記バイナリ情報を示すステップと、
そうでない場合、前記複数の適用可能なコード化モードの第２のコード化モードにしたがって前記複数のマクロブロックの前記バイナリ情報を符号化するステップであって、前記第２のコード化モードの構文は、１つのコードが前記複数のマクロブロックの２つまたはそれ以上の前記バイナリ情報を示すことを許すステップと
を含む前記符号化するステップと、
ビットストリーム内の圧縮済みビデオ情報を出力するステップであって、前記圧縮済みビデオ情報は前記選択されたコード化モードを示すコード化モード選択構文要素を含むステップと
を備えたことを特徴とする方法。
【請求項３】
前記第１のコード化モードは、前記マクロブロック当たり１つの構文要素がマクロブロック層構文要素である低遅延モードであり、前記第２のコード化モードは、前記複数のマクロブロックの前記バイナリ情報がフレーム層構文要素として符号化されるビットプレーンコード化モードであることを特徴とする請求項１または２に記載の方法。
【請求項４】
前記第２のコード化モードは、前記複数のマクロブロックの前記バイナリ情報が、マクロブロックごとに計算された予測値に関する残差として符号化される差分符号化モードであることを特徴とする請求項１または２に記載の方法。
【請求項５】
前記第２のコード化モードは、行予測コード化モードまたは列予測コード化モードであることを特徴とする請求項１または２に記載の方法。
【請求項６】
前記第２のコード化モードは、前記１つのコードが前記複数のマクロブロックの１つの対の前記バイナリ情報を示すベクトル可変長符号化モードであることを特徴とする請求項１または２に記載の方法。
【請求項７】
前記第２のコード化モードは、前記１つのコードが前記複数のマクロブロックの２×３のタイルまたは３×２のタイルの前記バイナリ情報を示すベクトル可変長符号化モードであることを特徴とする請求項１または２に記載の方法。
【請求項８】
前記第２のコード化モードにしたがって、反転構文要素が前記バイナリシンボルの値を反転するかどうかを示すことを特徴とする請求項１または２に記載の方法。
【請求項９】
前記バイナリ情報は、前記複数のマクロブロックの動きベクトル計数情報であることを特徴とする請求項１または２に記載の方法。
【請求項１０】
前記バイナリ情報は、前記複数のマクロブロックのフィールド／フレームフラグであることを特徴とする請求項１または２に記載の方法。
【請求項１１】
前記バイナリ情報は、前記複数のマクロブロックのスキップマクロブロック情報であり、前記スキップマクロブロック情報は前記複数のマクロブロックがスキップされるかまたはされないかを示し、
前記マクロブロックが、前記ビデオフレーム内の１つまたは複数の他のマクロブロックの動きに基く予測された動きを使用し、
前記マクロブロックが、残差情報を有さない場合、
前記複数のマクロブロックの１つがスキップされることを特徴とする請求項１または２に記載の方法。
【請求項１２】
請求項１または２に記載の方法を前記コンピューティングデバイスに実行させるためのコンピュータ実行可能命令を記憶したことを特徴とするコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
ビデオ符号化／復号応用分野でバイナリ情報を符号化／復号するための技法およびツールに関する。たとえば、ビデオエンコーダによって、スキップマクロブロック情報を符号化される。
【背景技術】
【０００２】
本願は、２００１年１２月１７日に出願された「Techniques and Tools for Video Encoding and Decoding」という名称の米国特許仮出願第６０／３４１，６７４号を参照により組み込む。また、本願は、２００２年５月３日に出願された「Skip Macroblock Coding」という名称の米国特許仮出願第６０／３７７，７１２号を参照により組み込む。
【０００３】
デジタルビデオは、大量の記憶容量と伝送容量を消費する。典型的な非圧縮デジタルビデオシーケンスには、１秒間に１５フレームまたは３０フレームが含まれる。各フレームは、数万または数十万の（ペルとも呼ばれる）画素を含む可能性がある。各画素は、画面の小さな要素を表す。非圧縮状態では、コンピュータは通常、２４ビットで１画素を表す。したがって、典型的な非圧縮デジタルビデオシーケンスの１秒当たりビット数、またはビットレートは、５百万ビット／秒以上にのぼる可能性がある。
【０００４】
ほとんどのコンピュータおよびコンピュータネットワークは、非圧縮デジタルビデオを処理するほどの諸資源を有していない。そのため、技術者は、（コード化または符号化とも呼ばれる）圧縮を使用してデジタルビデオのビットレートを削減する。可逆（ｌｏｓｓｌｅｓｓ）が可能であり、この場合ビデオの品質が損なわれないが、ビットレートの削減はビデオが複雑なため制限される。あるいは、非可逆（ｌｏｓｓｙ）圧縮も可能であり、この場合ビデオの品質は損なわれるが、より劇的にビットレートが削減される。伸張は、圧縮の反対である。
【０００５】
一般に、ビデオ圧縮技法には、フレーム内圧縮とフレーム間圧縮がある。フレーム内圧縮技法は、一般にＩフレームまたはキーフレームと呼ばれる個々のフレームを圧縮する。フレーム間圧縮技法は、一般に、予測フレーム、Ｐフレーム、またはＢフレームと呼ばれる先行するフレームおよび／または次に来るフレームを参照して諸フレームを圧縮する。
【０００６】
Ｍｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＷｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｖｉｄｅｏバージョン７（ＷＭＶ７）は、ビデオエンコーダとビデオデコーダを含む。ＷＭＶ７エンコーダは、フレーム内圧縮とフレーム間圧縮を使用し、ＷＭＶ７デコーダは、フレーム内伸張とフレーム間伸張を使用する。
【０００７】
Ａ．ＷＭＶ７内のフレーム内圧縮
図１は、ＷＭＶ７エンコーダにおけるキーフレーム内画素のブロック（１０５）のブロックベースのフレーム内圧縮（１００）を示す。ブロックは、１組の画素、たとえば、８×８配列の画素である。ＷＭＶ７エンコーダは、キービデオフレームを画素の８×８ブロック群に分割し、８×８離散コサイン変換（ＤＣＴ）（１１０）を、ブロック（１０５）など個々のブロックに適用する。ＤＣＴは、画素の８×８ブロック（空間情報）を、周波数情報であるＤＣＴ係数（１１５）の８×８ブロックに変換するある種の周波数変換である。ＤＣＴ演算自体は可逆またはほぼ可逆である。しかし、元の画素値に比べて、ＤＣＴ係数は、エンコーダが圧縮するのにより効率的である。というのは、有意な情報の大部分が低周波係数（従来、ブロック（１１５）の左上）に集中され、高周波係数（従来、ブロック（１１５）の右下）の多数がゼロまたはゼロに近い値を有するからである。
【０００８】
次いで、エンコーダは、ＤＣＴ係数を量子化し（１２０）、量子化されたＤＣＴ係数の８×８ブロック（１２５）を生じる。たとえば、エンコーダは、均一なスカラ量子化ステップサイズを各係数に適用し、これは、各係数を同じ値および丸めによって割ることに似ている。たとえば、ＤＣＴ係数値が１６３であり、ステップサイズが１０である場合、量子化されたＤＣＴ係数値は１６である。量子化は非可逆である。再構築されるＤＣＴ係数値は、１６３ではなく１６０となることになる。低周波ＤＣＴ係数は、より高い値を有する傾向があるため、量子化により精度が失われるが、その係数についての情報が完全に失われることにはならない。一方、高周波ＤＣＴ係数は、ゼロまたはゼロに近い値を有する傾向があるため、高周波係数を量子化すると、一般にゼロ値の連続領域になる。さらに、場合によっては、高周波ＤＣＴ係数が低周波ＤＣＴ係数より粗く量子化され、その高周波ＤＣＴ係数についてより多くの精度／情報が失われる。
【０００９】
次いで、エンコーダは、可逆圧縮の一形態であるエントロピー符号化用に、量子化されたＤＣＴ係数（１２５）の８×８ブロックを用意する。エントロピー符号化の厳密なタイプは、係数がＤＣ係数（低周波）であるか、それとも上端行または左列のＡＣ係数（他の周波数）であるか、それとも別のＡＣ係数であるかに応じて変わる可能性がある。
【００１０】
エンコーダは、符号化されるブロックの予め符号化済みの隣接ブロック（ｎｅｉｇｈｂｏｒ）（たとえば、上端または左）である隣接８×８ブロックのＤＣ係数（１３６）との差分としてＤＣ係数（１２６）を符号化する（図１は、フレーム内で符号化されるブロックの左に位置する隣接ブロック（１３５）を示す）。エンコーダは、その差分をエントロピー符号化する（１４０）。
【００１１】
エントロピーエンコーダは、ＡＣ係数の左列または上端行を、隣接する８×８ブロックの対応する列または行から差分として符号化することができる。図１は、（左に）隣接するブロック（１３５）の左列（１３７）から差分（１４７）として符号化されたＡＣ係数の左列（１２７）を示す。差分符号化は、差分係数がゼロの値を有する機会を増大する。残りのＡＣ係数は、量子化されたＤＣＴ係数のブロック（１２５）からのものである。
【００１２】
エンコーダは、予測され量子化されたＡＣ  ＤＣＴ係数の８×８ブロックを１次元アレイ（１５５）の形に走査し（１５０）、次いで、ランレングス符号化（１６０）の一変形形態を使用して、走査されたＡＣ係数をエントロピー符号化する。エンコーダは、エントロピーコードを１つまたは複数のラン／レベル／ラストテーブル（１６５）から選択し、エントロピーコードを出力する。
【００１３】
キーフレームは、予測フレームよりはるかにビットレートに貢献する。低ビットレートまたは中ビットレートの応用分野では、キーフレームは、しばしば性能において決定的なボトルネックとなり、その結果、キーフレームの効率的な圧縮が重要である。
【００１４】
図２は、図１に示されているものなどフレーム内圧縮の欠点を示す図である。具体的には、キーフレームのブロック間の冗長な利用は、ブロック（２１０）の左（２２０）または上端（２３０）隣接ブロックからの周波数係数のサブセット（たとえば、ＤＣ係数、およびＡＣ係数の左列（または上端行））の予測に限定される。ＤＣ係数は、ブロックの平均を表し、ＡＣ係数の左列は、ブロックの行の平均を表し、上端行は、列の平均を表す。実際には、ＷＭＶ７の場合のようにＤＣおよびＡＣ係数の予測は、外挿を左（または上端）隣接ブロックの行毎（または列毎）平均信号に制限する。左ブロック（２２０）内の特定の行（２２１）の場合、左ブロック（２２０）についての左ＤＣＴ係数列内のＡＣ係数が、ブロック（２１０）の対応する行（２１１）全体を予測するために使用される。
【００１５】
Ｂ．ＷＭＶ７内のフレーム間圧縮
ＷＭＶ７エンコーダのフレーム間圧縮は、ブロックベースの動き補償予測コード化と、それに続く残留誤差の変換コード化とを使用する。図３および４は、ＷＭＶ７エンコーダにおける予測フレームについてのブロックベースのフレーム間圧縮を示す。具体的には、図３は、予測フレーム（３１０）についての動き推定を示し、図４は、予測フレームの動き推定済みブロックについての予測残差の圧縮を示す。
【００１６】
ＷＭＶ７エンコーダは、予測フレームを画素の８×８ブロック群に分割する。４個の８×８ブロックからなるグループによりマクロブロックが形成される。各マクロブロックについて、動き推定処理が実行される。動き推定により、基準フレーム、たとえば先にコード化された先行フレームに対して、画素のマクロブロックの動きが概算される。図３では、ＷＭＶ７エンコーダは、予測フレーム（３１０）内のマクロブロック（３１５）について動きベクトルを計算する。動きベクトルを計算するために、エンコーダは、基準フレーム（３３０）の探索領域（３３５）内で探索する。探索領域（３３５）内で、エンコーダは、良好に合致する候補マクロブロックを見つけるために、予測フレーム（３１０）からのマクロブロック（３１５）を様々な候補マクロブロックと比較する。エンコーダは、エンコーダについて所望の動き推定分解能に応じて、探索領域（３３５）内で画素毎または１／２画素毎に候補マクロブロックを検査することができる。他のビデオエンコーダは、他の増分、たとえば１／４画素毎で検査する。ある候補マクロブロックについて、エンコーダは、予測フレーム（３１０）のマクロブロック（３１５）とその候補マクロブロックとの間の差異、および、そのマクロブロックについて動きベクトルを符号化するコストを検査する。エンコーダが良好に合致するマクロブロックを見つけた後に、ブロック合致処理は終了する。エンコーダは、合致マクロブロックについて（エントロピー符号化された）動きベクトルを出力し、その結果、デコーダは、復号中に合致マクロブロックを見つけることができる。予測フレーム（３１０）を復号するとき、デコーダはその動きベクトルを使用し、基準フレーム（３３０）からの情報を使用して、マクロブロック（３１５）についての予測マクロブロックを計算する。マクロブロックについての予測が完璧であることはまれであり、その結果、エンコーダは通常、予測マクロブロックとマクロブロック（３１５）自体との間の画素差の８×８ブロック（誤差または残留ブロックとも呼ばれる）を符号化する。
【００１７】
図４は、ＷＭＶ７エンコーダにおける動き推定済みブロックについての誤差ブロック（４３５）の計算および符号化を示す。誤差ブロック（４３５）は、予測ブロック（４１５）と元の現行ブロック（４２５）との間の差である。エンコーダは、ＤＣＴ（４４０）を誤差ブロック（４３５）に適用して係数の８×８ブロック（４４５）を生成する。誤差ブロック（４３５）についての有意な情報は、画素値についてのＤＣＴ係数の場合よりもさらに、低周波係数（従来、ブロック（４４５）の左上）に集中され、高周波係数の多数がゼロまたはゼロに近い値を有するのである（従来、ブロック（４４５）の右下）。
【００１８】
次いで、エンコーダは、ＤＣＴ係数を量子化し（４５０）、量子化されたＤＣＴ係数の８×８ブロック（４５５）を生成する。量子化ステップのサイズは、調整可能である。この場合も、低周波ＤＣＴ係数は、より高い値を有する傾向があるため、量子化により精度が失われるが、その係数についての情報が完全に失われることにはならない。一方、高周波ＤＣＴ係数は、ゼロまたはゼロに近い値を有する傾向があるため、高周波係数を量子化すると、ゼロ値の連続領域になる。さらに、場合によっては、高周波ＤＣＴ係数が低周波ＤＣＴ係数より粗く量子化され、その高周波ＤＣＴ係数についてより多くの精度／情報が失われる。
【００１９】
さらに、エンコーダは、エントロピー符号化用に、量子化されたＤＣＴ係数の８×８ブロック（４５５）を用意する。エンコーダは、８×８ブロック（４５５）を６４要素有する１次元アレイ（４６５）の形に走査し（４６０）、その結果、係数は概して低周波から高周波に順序付けられ、これにより、典型的には、ゼロ値の長いランが生み出される。
【００２０】
エンコーダは、ランレングス符号化（４７０）の一変形形態を使用して、走査された係数をエントロピー符号化する。エンコーダは、エントロピーコードを１つまたは複数のラン／レベル／ラストテーブル（４７５）から選択し、エントロピーコードを出力する。
【００２１】
マクロブロックについての動きベクトルがゼロ（すなわち、動きがない）であり、そのマクロブロックについて残留ブロック情報が送信されない場合、エンコーダは、そのマクロブロックについて１ビットのスキップマクロブロックフラグを使用する。これは、多くの種類のビデオコンテンツ（たとえば、動きの少ない、および／またはビットレートの低いビデオ）について、動きベクトルと残留ブロック情報の送信を回避することによってビットレートを削減する。エンコーダは、マクロブロックについての他の情報と共に、出力ビットストリーム内のマクロブロック層に、そのマクロブロックについてのスキップマクロブロックフラグを置く。
【００２２】
図５は、フレーム間コード化済みブロックについての復号プロセス（５００）を示す。ＤＣＴ係数の量子化により、再構築されたブロック（５７５）は、対応する元のブロックと同一ではない。圧縮は非可逆となる。
【００２３】
図５を要約すると、デコーダは、可変長符号化と、１つまたは複数のラン／レベル／ラストテーブル（５１５）とを使用し、予測残差を表すエントロピー符号化済み情報を復号する（５１０、５２０）。デコーダは、エントロピー符号化済み情報を格納する１次元アレイ（５２５）を２次元ブロック（５３５）の形に逆走査する（５３０）。デコーダは、そのデータを逆量子化および逆離散コサイン変換し（共に５４０）、再構築された誤差ブロック（５４５）を生成する。別個の経路で、デコーダは、基準フレームからの変位についての動きベクトル情報を使用し、予測ブロック（５６５）を計算する。デコーダは、予測ブロック（５６５）を再構築された誤差ブロック（５４５）と組み合わせ（５７０）、再構築されたブロック（５７５）を形成する。
【００２４】
デコーダは、あるマクロブロックについてスキップマクロブロックフラグを受信すると、そのマクロブロックについて予測の計算と残留ブロック情報の復号とをスキップする。その代わりに、デコーダは、基準フレーム内のマクロブロックの位置からの対応する画素データを使用する。
【００２５】
元のフレームと再構築されたフレームとの間の変化量は歪みと呼ばれ、フレームをコード化するのに必要とされるビット数はレートと呼ばれる。歪みの量は、レートにおおよそ反比例する。換言すれば、より少ないビット（より高い圧縮率）でフレームをコード化すると、歪みがより多くなることになり、逆も同様である。ビデオ圧縮方式の目標の１つは、レート歪みを改善しようと試みること、換言すれば、より少ないビットを使用して同じ歪み（あるいは、同じビット数で、より少ない歪み）を達成しようと試みることである。
【００２６】
ＷＭＶ７でスキップマクロブロックフラグを使用することにより、多くの種類のビデオコンテンツについてビットレートが削減されるが、場合によっては、最適とは言えない。多くの場合において、たとえば、スキップマクロブロックが映像内に集まって発生したとき、マクロブロックからマクロブロックにかけてスキップマクロブロックフラグの冗長性を利用できない。また、ＷＭＶ７は、予測フレーム内のマクロブロックがスキップされると、そのマクロブロックについての動き予測も無視されるが、これは、場合によっては予測フレームの圧縮の効率を損なう。
【００２７】
Ｃ．ビデオ圧縮および伸長のための標準
ＷＭＶ７の他に、いくつかの国際標準がビデオ圧縮／伸長に関連して定められている。これらの標準には、ＭＰＥＧ（Ｍｏｔｉｏｎ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）１、２、４標準、および国際電気通信連合会（ＩＴＵ）のＨ．２６１、Ｈ．２６２、Ｈ．２６３標準がある。ＷＭＶ７と同様に、これらの標準は、フレーム内およびフレーム間圧縮の組合せを使用するが、これらの標準は一般に、使用される圧縮技法の詳細においてＷＭＶ７と異なる。
【００２８】
いくつかの国際標準は、マクロブロックのスキッピング符号化を、ビデオ圧縮／伸長で使用すべきツールと考えている。各標準でのスキップマクロブロックコード化に関する追加の詳細については、各標準の仕様書自体を参照されたい。
【発明の概要】
【発明が解決しようとする課題】
【００２９】
上記の標準におけるスキップマクロブロックコード化は、一般に、多くの種類のビデオコンテンツについてビットレートを削減するが、場合によっては、最適とは言えない。多くの場合において、たとえばスキップマクロブロックが所定の映像に固まって発生したとき、マクロブロックからマクロブロックにかけてスキップマクロブロックフラグの冗長性を利用できない。また、ＷＭＶ７は、予測マクロブロック／映像内のマクロブロックがスキップされると、そのマクロブロックについて動き予測も無視されるが、これは、場合によっては予測マクロブロック／映像の圧縮の効率を損なうこととなる。
【００３０】
デジタルビデオに対するビデオ圧縮／伸長の決定的な重要性を考えると、ビデオ圧縮／伸長が十分に研究開発されてきている分野であることは驚くべきことではない。しかしながら、従来のビデオ圧縮／伸長技法がどのような利益を有しているとしても、以下の技法およびツールの利点は有していない。
【課題を解決するための手段】
【００３１】
要約すると、この詳細な説明は、バイナリ情報を（たとえば、ビデオエンコーダ／デコーダ内で）符号化／復号するための様々な技法およびツールを目的とする。バイナリ情報は、ビデオエンコーダまたはデコーダがビデオフレーム内のいくつかのマクロブロックをスキップするかどうかを示すビットを含むことができる。あるいは、バイナリ情報は、マクロブロックの動きベクトル分解能（たとえば、１−ＭＶまたは４−ＭＶ）、インターレースモード（たとえば、フィールドまたはフレーム）、または何らかの他の情報を示すビットを含むことができる。バイナリ情報は、フレーム毎に、または何らかの他の基準に基づいて符号化することができる。
【００３２】
いくつかの実施形態において、バイナリ情報は、ビットプレーン内に配置される。たとえば、ビットプレーンは、ピクチャ／フレーム層でコード化される。またはこれに替えて、バイナリ情報は、何らかの他の方法で構成され、および／または異なる層でコード化される。エンコーダ／デコーダは、このバイナリ情報を処理する。バイナリ情報は、マクロブロックレベルの情報を含むことができる。またはこれに替えて、エンコーダ／デコーダは、ブロックレベル情報、サブブロックレベル情報、または画素レベル情報のビットプレーンを処理する。
【００３３】
いくつかの実施形態において、エンコーダ／デコーダは、コード化モードを切り換える。たとえば、エンコーダ／デコーダは、ノーマルモード、行スキップモード、列スキップモードを使用する。異なるモードにより、エンコーダ／デコーダは、バイナリ情報の冗長性を利用することができる。またはこれに替えて、エンコーダ／デコーダは、差分モードなど他のモードおよび／または追加のモードを使用する。効率を高めるために、エンコーダ／デコーダは、いくつかのモードでビットプレーン反転技法を使用することができる。
【００３４】
いくつかの実施形態において、エンコーダ／デコーダは、動きがその因果的に予測された動きに等しい、また、残留誤差がゼロである予測マクロブロックとして、スキップマクロブロックを規定する。またはこれに替えて、エンコーダ／デコーダは、動きゼロ、残留誤差ゼロの予測マクロブロックとして、スキップマクロブロックを規定する。
【００３５】
いくつかの実施形態において、エンコーダ／デコーダは、非圧縮コード化モードを使用し、低遅延応用例を可能にする。たとえば、非圧縮コード化モードでは、フレーム／ピクチャ内のマクロブロックすべてが符号化されるまで待つ必要なしに、符号化されたマクロブロックを直ちにデコーダに送信することができる。エンコーダ／デコーダは、非圧縮コード化モードと他のモードとの間で切り換えることができる。
【００３６】
様々な技法およびツールを、組み合わせて、または独立して使用することができる。具体的には、本願では、スキップマクロブロック符号化／復号の２つの実施について、対応するビットストリーム構文と共に説明する。様々な実施形態において、説明する技法およびツールの１つまたは複数が実施される。
【００３７】
追加の特徴および利点は、添付の図面を参照しながら進行する様々な実施形態の以下の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【００３８】
【図１】従来技術による、画素の８×８ブロックのブロックベースのフレーム内圧縮を示す図である。
【図２】従来技術による、周波数係数の予測を示す図である。
【図３】従来技術による、ビデオエンコーダ内の動き予測を示す図である。
【図４】従来技術による、ビデオエンコーダ内の予測残差の８×８ブロックに対するブロックベースのフレーム間圧縮を示す図である。
【図５】従来技術による、予測残差の８×８ブロックに対するブロックベースのフレーム間伸長を示す図である。
【図６】説明するいくつかの実施形態を実施することができる好適なコンピューティング環境のブロック図である。
【図７】説明するいくつかの実施形態で使用される一般化されたビデオエンコーダシステムのブロック図である。
【図８】説明するいくつかの実施形態で使用される一般化されたビデオデコーダシステムのブロック図である。
【図９】第１の実施例による、Ｐピクチャ層を構成するビットストリーム要素を示すチャートである。
【図１０】複数のスキップマクロブロック符号化モードを有するビデオエンコーダ内でスキップマクロブロック情報を符号化するための技法を示すフローチャートである。
【図１１】複数のスキップマクロブロック符号化モードを有するビデオエンコーダ内で符号化されたスキップマクロブロック情報を復号するための技法を示すフローチャートである。
【図１２】スキップマクロブロック符号化フレームの例を示す図である。
【図１３】ノーマルスキップマクロブロック符号化モードで符号化するための技法を示すフローチャートである。
【図１４】行予測スキップマクロブロック符号化モードで符号化するための技法を示すフローチャートである。
【図１５】スキップマクロブロック情報の行予測復号のための擬似コードを示すコードリストである。
【図１６】列予測スキップマクロブロック符号化モードで符号化するための技法を示すフローチャートである。
【図１７】スキップマクロブロック情報の列予測復号のための擬似コードを示すコードリストである。
【図１８】ビデオエンコーダ内でいくつかのマクロブロックのコード化をスキップするかどうか判定するための技法を示すフローチャートである。
【図１９】行スキップコード化モードでビットプレーン内のバイナリ情報を符号化するための技法を示すフローチャートである。
【図２０】列スキップコード化モードでビットプレーン内のバイナリ情報を符号化するための技法を示すフローチャートである。
【図２１】ノーマル２コード化モードでビットプレーン内のバイナリ情報を符号化するための技法を示すフローチャートである。
【図２２】ノーマル６モードでタイル化されたバイナリ情報のフレームの例を示す図である。
【図２３】ノーマル６モードでタイル化されたバイナリ情報のフレームの例を示す図である。
【図２４】ノーマル６モードでタイル化されたバイナリ情報のフレームの例を示す図である。
【図２５】ノーマル６コード化モードでビットプレーン内のバイナリ情報を符号化するための技法を示すフローチャートである。
【図２６】差分符号化モードでバイナリ情報を符号化するための技法を示すフローチャートである。
【図２７】差分符号化モードで符号化されたバイナリ情報を復号するための技法を示すフローチャートである。
【図２８】低遅延応用例のために行コード化モードでバイナリ情報を選択的に符号化するための技法を示すフローチャートである。
【発明を実施するための形態】
【００３９】
以下に説明する実施形態は、バイナリ情報を（たとえば、ビデオエンコーダ／デコーダ内で）符号化し、および復号するための技法およびツールに関する。バイナリ情報は、ビデオエンコーダまたはデコーダがビデオフレーム内のいくつかのマクロブロックをスキップするかどうかを示すビットを含むことができる。あるいは、バイナリ情報は、マクロブロックの動きベクトル分解能（たとえば、１−ＭＶまたは４−ＭＶ）、インターレースモード（たとえば、フィールドまたはフレーム）、または何らかの他の情報を示すビットを含むことができる。バイナリ情報は、フレーム毎に、または何らかの他の基準に基づいて符号化することができる。
【００４０】
いくつかの実施形態において、バイナリ情報は、ビットプレーンで構成される。ビットプレーンは、ピクチャ／フレーム層でコード化される。またはこれに替えて、バイナリ情報は、何らかの他の方法で構成され、および／または異なる層でコード化される。
【００４１】
いくつかの実施形態において、エンコーダ／デコーダは、コード化モードを切り換える。たとえば、エンコーダ／デコーダは、ノーマルモード、行スキップモード、列スキップモードを使用する。異なるモードにより、エンコーダ／デコーダは、バイナリ情報の冗長性を利用することができる。またはこれに替えて、エンコーダ／デコーダは、他のモードおよび／または追加のモードを使用する。
【００４２】
いくつかの実施形態において、エンコーダ／デコーダは、動きがその因果的に予測された動きに等しく、および残留誤差がゼロである予測マクロブロックとして、スキップマクロブロックを規定する。またはこれに替えて、エンコーダ／デコーダは、動きゼロ、残留誤差ゼロの予測マクロブロックとして、スキップマクロブロックを規定する。
【００４３】
いくつかの実施形態において、効率的なフレーム／ピクチャレベルのコード化の代わりに、低遅延の応用例を可能にするように非圧縮コード化モードが許される。非圧縮コード化モードでは、フレーム／ピクチャ内のマクロブロックすべてが符号化されるまで待つことなしに、符号化されたマクロブロックを直ちにデコーダに送信することができる。
【００４４】
いくつかの実施形態において、エンコーダ／デコーダは、マクロブロックレベル情報のビットプレーンを処理する。またはこれに替えて、エンコーダ／デコーダは、ブロックレベル情報、サブブロックレベル情報、または画素レベル情報のビットプレーンを処理する。
【００４５】
様々な技法およびツールを、組み合わせて、または独立して使用することができる。具体的には、本願では、スキップマクロブロック符号化／復号の２つの実装については、対応するビットストリーム構文と共に説明している。様々な実施形態において、説明している技法およびツールの１つまたは複数が実装される。
【００４６】
説明する実施形態において、ビデオエンコーダ／デコーダは、様々な技法を実装する。これらの技法のための動作は、一般に、提示の目的で特定の順番にそって順次説明するが、これには、特定の順序付けが必要とされない限り、この動作の順序を重要でない範囲で再構成した場合も包含されることを理解されたい。たとえば、順次説明する動作は、場合によっては、再構成し、または同時に実行することができる。さらに、話を簡単にするために、フローチャートには、一般に、特定の技法を他の技法と共に使用することができる様々な方法は示さない。
【００４７】
説明する実施形態において、ビデオエンコーダ／デコーダは、ビットストリーム内の様々なフラグおよび信号を使用する。ここで特定のフラグおよび信号について説明するが、これには、そのフラグおよび信号について様々な取決め（たとえば、１でなく０）が包含されることを理解されたい。
【００４８】
Ｉ．コンピューティング環境
図６は、説明する実施形態のいくつかを実施することができる好適なコンピューティング環境（６００）の一般化された例を示す。この技法およびツールは、様々な汎用または専用コンピューティング環境で実施することができるため、コンピューティング環境（６００）は、使用または機能の範囲についてのどんな制限も示唆もないものとする。
【００４９】
図６を参照すると、コンピューティング環境（６００）は、少なくとも１つの処理装置（６１０）およびメモリ（６２０）を含んでいる。図６では、この最も基本的な構成（６３０）が破線内に含まれている。処理装置（６１０）はコンピュータ実行可能命令を実行し、実プロセッサでも仮想プロセッサでもよい。多重処理システムでは、複数の処理装置がコンピュータ実行可能命令を実行し、処理力を高める。メモリ（６２０）は、揮発性メモリ（たとえば、レジスタ、キャッシュ、ＲＡＭ）、不揮発性メモリ（たとえば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリなど）、またはこれら２つの何らかの組合せとすることができる。メモリ（６２０）は、ビデオエンコーダまたはデコーダなど、エンコーダまたはデコーダを実施するソフトウェア（６８０）を記憶する。
【００５０】
コンピューティング環境は、追加の特徴を有することができる。たとえば、コンピューティング環境（６００）は、記憶装置（６４０）、１つまたは複数の入力デバイス（６５０）、１つまたは複数の出力デバイス（６６０）、１つまたは複数の通信接続（６７０）を含む。バス、コントローラ、ネットワークなど相互接続機構（図示せず）が、コンピューティング環境（６００）の構成要素を相互接続する。一般に、オペレーティングシステムソフトウェア（図示せず）が、コンピューティング環境（６００）内で実行する他のソフトウェアのための動作環境を提供し、コンピューティング環境（６００）の構成要素の活動を調整する。
【００５１】
記憶装置（６４０）は、取外し式または固定式とすることができ、磁気ディスク、磁気テープもしくはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、または、情報を記憶するために使用することができる、また、コンピューティング環境（６００）内でアクセスされる可能性がある任意の他の媒体を含む。記憶装置（６４０）は、エンコーダまたはデコーダを実施するソフトウェア（６８０）用の命令を記憶する。
【００５２】
入力デバイス（６５０）は、キーボード、マウス、ペン、またはトラックボールなどタッチ入力デバイス、音声入力デバイス、走査デバイス、あるいは、コンピューティング環境（６００）に入力を提供する別のデバイスとすることができる。オーディオまたはビデオ符号化の場合、入力デバイス（６５０）は、サウンドカード、ビデオカード、ＴＶ同調器カード、または、オーディオ入力もしくはビデオ入力をアナログ形態もしくはデジタル形態で受け入れる類似のデバイス、あるいは、オーディオサンプルまたはビデオサンプルをコンピューティング環境（６００）内に読み取るＣＤ−ＲＯＭまたはＣＤ−ＲＷとすることができる。出力デバイス（６６０）は、ディスプレイ、プリンタ、スピーカ、ＣＤライタ、または、コンピューティング環境（６００）からの出力を提供する別のデバイスとすることができる。
【００５３】
通信接続（６７０）は、通信媒体を介して別のコンピューティングエンティティに対する通信を可能にする。通信媒体は、コンピュータ実行可能命令、オーディオもしくはビデオの入力もしくは出力、または、変調データ信号内の他のデータなど、情報を搬送する。変調データ信号は、情報を信号に符号化するようにその特性の１つまたは複数が設定された、または変化した信号である。限定ではなく例を挙げると、通信媒体には、電気、光、ＲＦ、赤外線、音響、または他の搬送波と共に実施される有線技法または無線技法が含まれる。
【００５４】
この技法およびツールについては、コンピュータ読取可能な媒体の一般的なコンテキストで述べることができる。コンピュータ読取可能な媒体は、コンピューティング環境内でアクセスされる可能性がある任意の使用可能な媒体である。限定ではなく例を挙げると、コンピューティング環境（６００）と共に、コンピュータ読取可能な媒体には、メモリ（６２０）、記憶装置（６４０）、通信媒体、および上記のいずれかの組合せが含まれる。
【００５５】
この技法およびツールについては、コンピューティング環境内で、ターゲットの実プロセッサまたは仮想プロセッサ上で実行される、プログラムモジュール内に含まれるものなどコンピュータ実行可能命令の一般的な状況で述べることができる。概して、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データタイプを実施するルーチン、プログラム、ライブラリ、オブジェクト、クラス、コンポーネント、データ構造などを含む。プログラムモジュールの機能は、様々な実施形態で望まれるように、組み合わせることも、プログラムモジュール間で分割することもできる。プログラムモジュール用のコンピュータ実行可能命令は、ローカルまたは分散型コンピューティング環境内で実行することができる。
【００５６】
提示の目的で、この詳細な説明では、「決定（判定）する」「選択する」「再構築する」「通知する」のような用語を使用して、コンピューティング環境内のコンピュータの動作について述べる。これらの用語は、コンピュータによって実行される動作について高レベルで抽象化したものであり、人間によって行われる動作と混同すべきでない。これらの用語に対応する実際のコンピュータの動作は、実施形態に応じて変わる。
【００５７】
ＩＩ．一般化されたビデオエンコーダ／デコーダ
図７は、一般化されたビデオエンコーダ（７００）のブロック図であり、図８は、一般化されたビデオデコーダ（８００）のブロック図である。
【００５８】
エンコーダおよびデコーダ内のモジュール間に示されている関係は、エンコーダおよびデコーダ内の情報の主な流れを示し、他の関係については、話を簡単にするため示さない。具体的には、図７および８は、通常、ビデオシーケンス、フレーム、マクロブロック、ブロックなどのために使用されるエンコーダ設定、モード、テーブルなどを示す副次情報を示していない。そのような副次情報は、典型的には、副次情報をエントロピー符号化した後に、出力ビットストリーム内で送られる。出力ビットストリームのフォーマットは、Ｗｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｖｉｄｅｏバージョン８または別のフォーマットとすることができる。
【００５９】
エンコーダ（７００）およびデコーダ（８００）はブロックベースのものであり、４：２：０マクロブロックフォーマットを使用し、各マクロブロックは、４つの８×８輝度ブロック（１つの１６×１６マクロブロックとして扱うこともある）と、２つの８×８色差ブロックとを含む。またはこれに替えて、エンコーダ（７００）およびデコーダ（８００）はオブジェクトベースのものであり、８×８ブロックおよび１６×１６マクロブロックと異なるマクロブロックまたはブロックフォーマットを使用する、あるいは異なるサイズまたは構成の画素の集合に対して演算を実行する。
【００６０】
実施形態および所望の圧縮のタイプとに応じて、エンコーダまたはデコーダのモジュールを、追加し、省略し、複数のモジュールに分割し、他のモジュールと組み合わせ、および／または同様なモジュールと置き換えることができる。代替の実施形態において、異なるモジュールおよび／またはモジュールの他の構成を有するエンコーダまたはデコーダによって、説明する技法の１つまたは複数が実装される。
【００６１】
Ａ．ビデオエンコーダ
図７は、一般的なビデオエンコーダシステム（７００）のブロック図である。エンコーダシステム（７００）は、現行フレーム（７０５）を含むビデオフレームのシーケンスを受信し、出力として圧縮済みビデオ情報（７９５）を生成する。ビデオエンコーダの特定の実施形態では、典型的には、一般化されたエンコーダ（７００）を変形し、または補足したバージョンが使用される。
【００６２】
エンコーダシステム（７００）は、予測フレームとキーフレームを圧縮する。提示の目的で、図７は、エンコーダシステム（７００）を介したキーフレームのための経路と、順方向予測フレームのための経路とを示す。エンコーダシステム（７００）の構成要素の多くが、キーフレームと予測フレームを共に圧縮するために使用される。これらの構成要素によって実行される厳密な動作は、圧縮される情報のタイプに応じて変わる可能性がある。
【００６３】
予測フレーム（Ｐフレーム、双方向予測用のＢフレーム、またはｉｎｔｅｒ−ｃｏｄｅｄフレームとも呼ばれる）は、１つまたは複数の他のフレームからの予測（または差）によって表される。予測残差は、予測されたものと元のフレームとの間の差である。一方、キーフレーム（Ｉフレーム、ｉｎｔｒａ−ｃｏｄｅｄフレームとも呼ばれる）は、他のフレームを参照することなしに圧縮される。
【００６４】
現行フレーム（７０５）が順方向予測フレームである場合、動き推定器（７１０）は、マクロブロック、または現行フレームの他の画素集合の動きを、基準フレームに対して推定する。基準フレームは、フレームストア（７２０）内にバッファされた再構築済みの先のフレームである。代替の実施形態において、基準フレームとは後のフレームのことであり、あるいは現行フレームは双方向で予測されることとなる。動き推定器（７１０）は、１画素、１／２画素、１／４画素、またはその他の増分だけ動きを推定することができ、フレーム毎に、または他の基準に基づいて、動き推定の分解能を切り換えることができる。動き推定の分解能は、水平方向と垂直方向で同じ、または異なるものとすることができる。動き推定器（７１０）は、動きベクトルなど動き情報（７１５）を副次情報として出力する。動き補償器（７３０）は、動き情報（７１５）を再構築済みの先のフレーム（７２５）に適用し、動き補償済み現行フレーム（７３５）を形成する。しかし、予測が完璧であることはまれであり、動き補償済み現行フレーム（７３５）と元の現行フレーム（７０５）との間の差が予測残差（７４５）である。またはこれに替えて、動き推定器と動き補償器は、別の種類の動き推定／補償を適用する。
【００６５】
周波数変換器（７６０）は、空間領域のビデオ情報を周波数領域（すなわち、スペクトル）データに変換する。ブロックベースのビデオフレームの場合、周波数変換器（７６０）は、離散コサイン変換（ＤＣＴ）またはＤＣＴの変形形態を画素データまたは予測残差データに適用し、ＤＣＴ係数のブロックを生成する。またはこれに替えて、周波数変換器（７６０）は、フーリエ変換など別の従来の周波数変換を適用する、または、ウェーブレットもしくはサブバンド解析を使用する。エンコーダが空間外挿（図７には図示せず）を使用してキーフレームのブロックを符号化する実施形態において、周波数変換器（７６０）は、スキューＤＣＴ（ｓｋｅｗｅｄ  ＤＣＴ）など、新たに方向付けられた周波数変換をキーフレームの予測残差のブロックに適用することができる。他の実施形態において、周波数変換器（７６０）は、８×８、８×４、４×８、または他のサイズの周波数変換（たとえば、ＤＣＴ）を予測フレームの予測残差に適用する。
【００６６】
次いで、量子化器（７７０）がスペクトルデータ係数のブロックを量子化する。量子化器は、ステップサイズをフレーム毎に変化させ、または他の基準に基づいて変化させて、均一なスカラ量子化をスペクトルデータに適用する。またはこれに替えて、量子化器は、スペクトルデータ係数に別のタイプの量子化、たとえば非均一な量子化、ベクトル量子化、若しくは非適応量子化を適用し、または周波数変換を使用しないエンコーダシステム内の空間領域データを直接量子化する。適応量子化に加えて、エンコーダ（７００）は、フレームドロップ、適応フィルタリング、またはレート制御を行う他の技法を使用することができる。
【００６７】
予測フレーム内の所与のマクロブロックがある種のタイプの情報を有していない（たとえば、そのマクロブロックについての動き情報がない、また、残差情報がない）場合、エンコーダ（７００）は、そのマクロブロックを、スキップマクロブロックとして符号化することができる。その場合、エンコーダは、圧縮済みビデオ情報（７９５）の出力ビットストリーム内で、そのスキップマクロブロックを示す。
【００６８】
後続の動き推定／補償のために再構築済みの現行フレームが必要とされるとき、逆量子化器（７７６）が、量子化されたスペクトルデータ係数に対して逆量子化を実行する。次いで、逆周波数変換器（７６６）が周波数変換器（７６０）の動作の逆を実行し、再構築された（予測フレームについての）予測残差、または再構築されたキーフレームを生成する。現行フレーム（７０５）がキーフレームであったならば、再構築済みキーフレームは、再構築済み現行フレーム（図示せず）として取り上げられる。現行フレーム（７０５）が予測フレームであった場合、再構築された予測残差が動き補償済み現行フレーム（７３５）に追加され、再構築済み現行フレームを形成する。フレームストア（７２０）は、次のフレームを予測する際に使用するために、再構築済み現行フレームをバッファする。いくつかの実施形態において、エンコーダは、デブロッキングフィルタを再構築済みフレームに適用し、フレームのブロック内の不連続を調整して滑らかにする。
【００６９】
エントロピーコーダ（７８０）は、量子化器（７７０）の出力、ならびにある種の副次情報（たとえば、動き情報（７１５）、空間外挿モード、量子化ステップサイズ）を圧縮する。典型的なエントロピー符号化技法には、算術符号化、差分符号化、ハフマン符号化、ランレングス符号化、ＬＺ符号化、辞書型符号化、および上記の組合せが含まれる。エントロピーコーダ（７８０）は、典型的には、異なる種類の情報（たとえば、ＤＣ係数、ＡＣ係数、異なる種類の副次情報）について異なるコード化技法を使用し、特定のコード化技法内の複数のコードテーブルの中から選択することができる。
【００７０】
エントロピーコーダ（７８０）は、圧縮済みビデオ情報（７９５）をバッファ（７９０）内に入れる。バッファレベルインジケータがビットレート適応モジュールに返される。
【００７１】
圧縮済みビデオ情報（７９５）は、一定の、または比較的一定のビットレートでバッファ（７９０）から送り出され、そのビットレートで後のストリームのために格納される。したがって、バッファ（７９０）のレベルは、主にフィルタされた量子化済みビデオ情報のエントロピーの関数であり、エントロピー符号化の効率に影響を及ぼす。またはこれに替えて、エンコーダシステム（７００）は、圧縮済みビデオ情報を圧縮後すぐにストリームし、バッファ（７９０）のレベルは、やはり送信するために情報がバッファ（７９０）から全て送り出せるレートによって決まる。
【００７２】
バッファ（７９０）の前後には、圧縮済みビデオ情報（７９５）は、ネットワークを介して送信するためにチャネル符号化することができる。チャネル符号化は、誤り検出および補正データを圧縮済みビデオ情報（７９５）に適用することができる。
【００７３】
Ｂ．ビデオデコーダ
図８は、一般的なビデオデコーダシステム（８００）のブロック図である。デコーダシステム（８００）は、ビデオフレームの圧縮済みシーケンスについて情報を受信し、再構築済みフレーム（８０５）を含む出力を生成する。ビデオデコーダの特定の実施形態は、典型的には、一般化されたデコーダ（８００）の変形形態または補足されたバージョンを使用する。
【００７４】
デコーダシステム（８００）は、予測フレームとキーフレームを伸長する。提示の目的で、図８には、デコーダシステム（８００）を介したキーフレームのための経路と、順方向予測フレームのための経路とを示す。デコーダシステム（８００）の構成要素の多くは、キーフレームと予測フレームを共に伸張するために使用される。これらの構成要素によって実行される厳密な動作は、伸張されている情報のタイプに応じて変わる可能性がある。
【００７５】
バッファ（８９０）は、圧縮されたビデオシーケンスについての情報（８９５）を受信し、受信された情報をエントロピーデコーダ（８８０）が使用できるようにする。バッファ（８９０）は、典型的には、経時的にかなり一定のレートで情報を受信し、帯域幅または伝送における短期的な変動を滑らかにするためのジッタバッファを含む。バッファ（８９０）は、再生バッファや他のバッファをも含むことができる。またはこれに替えて、バッファ（８９０）は、可変レートで情報を受信する。バッファ（８９０）の前後には、圧縮済みビデオ情報は、チャネル復号し、誤り検出および補正のために処理することができる。
【００７６】
エントロピーデコーダ（８８０）は、エントロピー符号化された量子化済みデータ、ならびにエントロピー符号化された副次情報（たとえば、動き情報（８１５）、空間外挿モード、量子化ステップサイズ）を復号し、典型的にはエンコーダ内で実行されたエントロピー符号化の逆を行う。エントロピー復号技法には、算術復号、差分復号、ハフマン復号、ランレングス復号、ＬＺ復号、辞書型復号、および上記の組合せが含まれる。エントロピーデコーダ（８８０）は、しばしば異なる種類の情報（たとえば、ＤＣ係数、ＡＣ係数、異なる種類の副次情報）について異なる復号技法を使用し、特定の復号技法内の複数のコードテーブルの中から選択することができる。
【００７７】
再構築すべきフレーム（８０５）が順方向予測フレームである場合、動き補償器（８３０）は、動き情報（８１５）を基準フレーム（８２５）に適用し、再構築されるフレーム（８０５）の予測（８３５）を形成する。たとえば、動き補償器（８３０）は、マクロブロック動きベクトルを使用し、基準フレーム（８２５）内のマクロブロックを見つける。フレームバッファ（８２０）は、基準フレームとして使用するために、先に再構築されたフレームを格納する。動き補償器（８３０）は、１画素、１／２画素、１／４画素、または他の増分で動きを補償することができ、フレーム毎に、または他の基準に基づいて、動き補償の分解能を切り換えることができる。動き補償の分解能は、水平方向と垂直方向で同じものとし、または異なるものとすることができる。またはこれに替えて、動き補償器は、別のタイプの動き補償を適用する。動き補償器による予測が完璧であることはまれであり、その結果、デコーダ（８００）は、予測残差をも再構築することとなる。
【００７８】
デコーダが、後続の動き補償のために再構築済みフレームを必要とするときは、フレームストア（８２０）は、次のフレームを予測する際に使用するため、再構築済み現行フレームをバッファする。いくつかの実施形態において、エンコーダは、デブロッキングフィルタを再構築済みフレームに適用し、フレームのブロック内の不連続を調整して滑らかにする。
【００７９】
逆量子化器（８７０）は、エントロピー符号化済みデータを逆量子化する。一般に、逆量子化器は、ステップサイズをフレーム毎に変化させ、または他の基準に基づいて変化させて、均一なスカラ逆量子化をエントロピー符号化済みデータに適用する。またはこれに替えて、逆量子化器は、データに別のタイプの逆量子化、たとえば非均一な量子化、ベクトル量子化、もしくは非適応逆量子化を適用する、または逆周波数変換を使用しないデコーダシステム内の空間領域データを直接逆量子化する。
【００８０】
逆周波数変換器（８６０）は、量子化された周波数領域データを空間領域ビデオ情報に変換する。ブロックベースのビデオフレームの場合、逆周波数変換器（８６０）は、逆ＤＣＴ（ＩＤＣＴ）またはＩＤＣＴの変形変換をＤＣＴ係数のブロックに適用して、キーフレームまたは予測フレームについて画素データまたは予測残差データを生成する。またはこれに替えて、逆周波数変換器（８６０）は、逆フーリエ変換など別の従来の逆周波数変換を適用し、またはウェーブレットもしくはサブバンド合成を使用する。デコーダが空間外挿（図８には図示せず）を使用してキーフレームのブロックを復号する実施形態において、逆周波数変換器（８６０）は、スキューＩＤＣＴ（ｓｋｅｗｅｄ  ＩＤＣＴ）など、新たに方向付けられた逆周波数変換をキーフレームの予測残差のブロックに適用することができる。他の実施形態において、逆周波数変換器（８６０）は、８×８、８×４、４×８、または他のサイズの逆周波数変換（たとえば、ＩＤＣＴ）を予測フレームの予測残差に適用する。
【００８１】
スキップマクロブロックが、ビデオフレームの圧縮されたシーケンスについての情報（８９５）のビットストリーム内で示されているときは、デコーダ（８００）は、非スキップマクロブロックについてビットストリーム内に通常含まれる情報（たとえば、動き情報および／または残差情報）を使用せずにスキップマクロブロックを再構築する。
【００８２】
ＩＩＩ．第１の実施例
第１の実施例において、ビデオエンコーダとデコーダは、それぞれ改善された効率でスキップマクロブロック情報を符号化して復号する。スキップマクロブロック情報は、ビデオビットストリーム内のピクチャ層で示され、エンコーダはスキップマクロブロック情報内の冗長性を利用することが可能となる。また、エンコーダ／デコーダは、スキップマクロブロック情報を符号化／復号するために、複数のコード化モード間で選択する。
【００８３】
Ａ．スキップマクロブロック情報のピクチャ層コード化
第１の実施例において、圧縮されたビデオシーケンスは、４つの階層の形に構造化されたデータで構成される。これらの層は、上から下に１）シーケンス層、２）ピクチャ層、３）マクロブロック層、４）ブロック層である。ピクチャ層では、各ピクチャについてのデータが、ピクチャヘッダと、それに続くマクロブロック層についてのデータとからなる（同様に、マクロブロック層では、各マクロブロック層についてのデータが、マクロブロックヘッダと、それに続くブロック層とからなる）。ＩピクチャとＰピクチャ用のビットストリーム要素には同一のものもあるが、Ｐピクチャだけに現れるものもあり、逆も同様である。
【００８４】
図９は、Ｐピクチャ層（９００）を構成するビットストリーム要素を示す。表１は、Ｐピクチャ層（９００）のビットストリーム要素を簡単に述べている。
【００８５】
【表１】
2010283893.tif 000003
【００８６】
具体的には、Ｐピクチャ層（９００）は、Ｐピクチャ内のマクロブロックのためのスキップマクロブロックフィールド（ＳＭＢ）（９３０）と、そのスキップマクロブロックフィールド（９３０）についてコード化モードを示すスキップマクロブロックコード（ＳＭＢＣ）フィールド（９２０）とを備える。ＳＭＢＣフィールド（９２０）は、Ｐピクチャヘッダ内だけに存在する。ＳＭＢＣ（９２０）は、フレーム内のスキップマクロブロックを示すために使用される４つのモードのうち１つを示す２ビット値である。第１の実施例において、スキップマクロブロックコード化モード群用の固定長コード（ＦＬＣ）は、以下の通りである。
【００８７】
【表２】
2010283893.tif 000004
【００８８】
コード化モードがノーマル、行予測、または列予測の場合には、ビットストリーム内の次のフィールドは、スキップマクロブロック情報を含むＳＭＢフィールド（９３０）となる。したがって、ＳＭＢフィールドは、Ｐピクチャヘッダ内だけに存在し、およびＳＭＢＣがノーマル、行予測、または列予測スキップマクロブロックコード化を示す場合だけ存在する。ＳＭＢＣがノーマルコード化を示す場合には、ＳＭＢフィールドのサイズがフレーム内のマクロブロックの数に等しい。ＳＭＢＣが行予測または列予測を示す場合には、以下に説明するように、ＳＭＢのサイズが可変である。
【００８９】
スキップマクロブロック情報は、フレーム内のどのマクロブロックがマクロブロック層に存在しないかについてデコーダに伝える。デコーダは、これらのマクロブロックについて、そのマクロブロックを再構築するとき対応するマクロブロック画素データを基準フレームからコピーすることになる。
【００９０】
Ｂ．スキップマクロブロック情報についてコード化モードを切り換える
上述のように、ＳＭＢＣフィールド（９２０）は、スキップマクロブロックフィールド（９３０）についてコード化モードを示す。より一般的に、図１０は、複数のスキップマクロブロックコード化モードを有するビデオエンコーダ内でスキップマクロブロック情報を符号化するための技法（１０００）を示す。図１１は、複数のスキップマクロブロックコード化モードを有するビデオエンコーダによって符号化されたスキップマクロブロック情報を復号するための対応する技法（１１００）を示す。
【００９１】
図１０を参照すると、エンコーダは、スキップマクロブロック情報をコード化するために、スキップマクロブロックコード化モードを選択する（１０１０）。たとえば、第１の実施例において、スキップマクロブロックコード化モード群には、どのマクロブロックもスキップされないモード、ノーマルモード、行予測（または「行スキップ」）モード、および列予測（または「列スキップ」）モードが含まれる。コード化モードが選択された後に、エンコーダは、そのスキップマクロブロック情報を符号化する（１０２０）。エンコーダは、ピクチャ毎にコード化モードを選択する。またはこれに替えて、エンコーダは、何らかの他の基準に基づいて（たとえば、シーケンスレベルで）コード化モードを選択する。エンコーダがスキップマクロブロック情報を符号化し終えると（１０３０）、符号化が終了する。
【００９２】
図１１を参照すると、デコーダは、スキップマクロブロック情報を符号化するためにエンコーダによって使用されたスキップマクロブロックコード化モードを決定する（１１１０）。次いで、デコーダは、そのスキップマクロブロック情報を復号する（１１２０）。デコーダは、ピクチャ毎にコード化モードを決定する。またはこれに替えて、デコーダは、何らかの他の基準に基づいて（たとえば、シーケンスレベルで）コード化モードを決定する。デコーダがスキップマクロブロック情報を復号し終えると（１１３０）、復号が終了する。
【００９３】
Ｃ．コード化モード
第１の実施例において、スキップマクロブロックコード化モード群には、どのマクロブロックもスキップされないモード、ノーマルモード、行予測（または「行スキップ」）モード、および列予測（または「列スキップ」）モードが含まれる。以下のセクションでは、スキップマクロブロックコード化フレームの例（１２００）を示す図１２を参照しながら、各モードでどのようにスキップマクロブロック情報が符号化されるかについて説明する。
【００９４】
１．ノーマルスキップマクロブロックコード化モード
ノーマルモードでは、各マクロブロックのスキップ／非スキップ状況がビットで表される。したがって、ビットユニットのＳＭＢフィールドのサイズは、フレーム内のマクロブロックの数に等しい。ＳＭＢフィールド内のビット位置は、左上のマクロブロックで始まって、フレーム内のマクロブロックのラスタ走査順に対応する。ビット値０は、対応するマクロブロックがスキップされないことを示し、ビット値１は、対応するマクロブロックがスキップされることを示す。
【００９５】
図１３は、ノーマルスキップマクロブロックコード化モードで符号化するための技法（１３００）を示す図である。最初に、エンコーダは、マクロブロックのコード化がスキップされることになるかどうか検査する（１３１０）。スキップされる場合、エンコーダは、ＳＭＢフィールドにビット値１を追加し、対応するマクロブロックがスキップされることを示す（１３２０）。そうでない場合には、エンコーダは、ＳＭＢフィールドにビット値０を追加し、対応するマクロブロックがスキップされないことを示す（１３３０）。エンコーダがＳＭＢフィールドにビットを追加し終えると（１３４０）、スキップマクロブロックコード化が終了する。
【００９６】
例として、ノーマルモードのコード化を使用すると、図１２のフレーム例（１２００）についてのＳＭＢフィールドは、０１００１０１１１１１１１１１１１１０１００１０と符号化されるはずである。
【００９７】
２．行予測スキップマクロブロックコード化モード
行予測モードでは、各マクロブロック行（上から下）の状況がビットで示される。ビットが１の場合には、その行が、全面的スキップマクロブロックを含み、次の行の状況が続く。ビットが０に等しい場合には、その行内の各マクロブロックについてのスキップ／非スキップ状況がビットで示される。したがって、長さが行内のマクロブロックの数に等しいビットフィールドが続く。ビットフィールド内のビット群は、左から右の順序でマクロブロックを表す。この場合も、値０は、対応するマクロブロックがスキップされないことを示し、値１は対応するマクロブロックがスキップされることを示す。
【００９８】
図１４は、行予測（または「行スキップ」）マクロブロックコード化モードで符号化するための技法（１４００）を示す図である。最初に、エンコーダは、所定の行に全面的スキップマクロブロックが含まれるかどうか検査する（１４１０）。含まれる場合、エンコーダは、インジケータビット１をＳＭＢフィールドに追加し（１４２０）、次の行の状況が続く。その行が全面的スキップマクロブロックを含んでいない場合、エンコーダはインジケータビット０をＳＭＢフィールドに追加し、その行内の各マクロブロックについてのスキップ／非スキップ状況がビットで示される（１４３０）。エンコーダがフレーム内のすべての行を処理すると（１４４０）、行予測符号化が終了する。
【００９９】
復号について説明すると、図１５は、スキップマクロブロック情報の行予測復号を示す擬似コード（１５００）を示す図である。擬似コード（１５００）では、関数ｇｅｔ＿ｂｉｔｓ（ｎ）がビットストリームからｎ個のビットを読み取り、その値を返す。
【０１００】
例として、行予測モードのコード化を使用すると、図１２のフレーム例（１２００）についてのＳＭＢフィールドは、００１００１０１１００１００１０と符号化されるはずである。
【０１０１】
３．列予測スキップマクロブロックコード化モード
列予測モードでは、各マクロブロック列（左から右）の状況がビットで示される。ビットが１の場合には、その列は、全面的スキップマクロブロックを含み、次の列の状況が続く。ビットが０に等しい場合には、その列内の各マクロブロックについてのスキップ／非スキップ状況がビットで示される。したがって、長さが列内のマクロブロックの数に等しいビットフィールドが続く。ビットフィールド内のビット群は、上から下の順序でマクロブロックを表す。この場合も、値０は、対応するマクロブロックがスキップされないことを示し、値１は、対応するマクロブロックがスキップされることを示す。
【０１０２】
図１６は、列予測（または「列スキップ」）マクロブロックコード化モードで符号化するための技法（１６００）を示す。最初に、エンコーダは、全面的スキップマクロブロックを列が含むかどうか検査する（１６１０）。含む場合、エンコーダは、インジケータビット１をＳＭＢフィールドに追加し（１６２０）、次の列の状況が続く。列が全面的スキップマクロブロックを含んでいない場合、エンコーダはインジケータビット０をＳＭＢフィールドに追加し、その列内の各マクロブロックについてのスキップ／非スキップ状況がビットで示される（１６３０）。エンコーダがフレーム内の列すべてを処理したとき（１６４０）、列予測符号化が終了する。
【０１０３】
復号について説明すると、図１７は、スキップマクロブロック情報の列予測復号を示す擬似コード（１７００）を示す図である。
【０１０４】
例として、列予測モードのコード化を使用すると、図１２のフレーム例（１２００）についてのＳＭＢフィールドは、００１１０１００１１０００１１０１００１１０と符号化されるはずである。
【０１０５】
ＩＶ．第２の実施例
第２の実施例において、ビデオエンコーダとデコーダは、それぞれ改善された効率でスキップマクロブロック情報および／または他の２Ｄバイナリデータを符号化し、復号する。エンコーダ／デコーダは、（動きゼロとは限らない）デフォルトの動きを有するものとしてスキップマクロブロックを規定し、これにより、エンコーダ／デコーダは、多くの場合において、より多くのマクロブロックをスキップすることができる。ビットプレーンの効率的なフレームレベルコード化は、スキップマクロブロック情報および／または他の２Ｄバイナリデータを示す。また、エンコーダ／デコーダは、低遅延応用例のためにスキップマクロブロックの非圧縮（ＭＢレベル）コード化オプションを使用することができる。
【０１０６】
Ａ．スキップビット定義（スキップマクロブロックの定義）
第２の実施例は、スキップマクロブロックの概念の新しい定義を含む。「スキップ」は、そこまでの細分レベルで情報をさらに送信する必要がないビットストリームの場合の条件に関連する。スキップマクロブロック（ブロック）は、デフォルトのタイプ、デフォルトの動き、デフォルトの残留誤差を有するマクロブロック（ブロック）である（これに比較して、他の実施例および標準では、スキップマクロブロックとは、動きゼロ、残差ゼロの予測マクロブロックである）。
【０１０７】
スキップマクロブロックの新しい定義は、動きがその因果的に予測された動きに等しく、および残留誤差がゼロである予測マクロブロックであるということである（他の定義との相違点は、デフォルトの動きが動きプレディクタ（ｐｒｅｄｉｃｔｏｒ）に等しく、これは必ずしもゼロでない可能性があることである）。
【０１０８】
たとえば、いくつかの実施形態において、現在のマクロブロックについての予測動きベクトルは、現在のマクロブロックの直接上方に、または直接左に向けられる。あるいは、プレディクタの水平成分および垂直成分は、現在のマクロブロックの左、上端、右上のマクロブロックの平行／水平成分毎の中央値から生成される。
【０１０９】
４つの動きベクトル（４ＭＶ）を有するスキップマクロブロックの動きベクトルは、自然な走査順で連続的に実行されたそれらのプレディクタによって与えられる。１つの動きベクトル（１ＭＶ）の場合と同様に、誤差残差はゼロである。
【０１１０】
図１８は、スキップマクロブロックの新定義に従って、ビデオエンコーダ内で特定のマクロブロックのコード化をスキップするかどうか判定するための技法（１８００）を示すフローチャートである。最初に、エンコーダは、現行フレームがＩフレームであるか、それともＰフレームであるか検査する（１８１０）。現行フレームがＩフレームである場合、現行フレーム内のどのマクロブロックもスキップされず（１８２０）、そのフレームについてのスキップマクロブロックコード化が終了する。
【０１１１】
一方、現行フレームがＰフレームである場合、エンコーダは、スキップすることができる現行フレーム内マクロブロックがないか検査する。所与のマクロブロックについて、エンコーダは、そのマクロブロックについての動きベクトルが、そのマクロブロックについて因果的に予測された動きベクトルに等しいかどうか（たとえば、そのマクロブロックについての差分動きベクトルがゼロに等しいかどうか）検査する（１８３０）。マクロブロックについての動きが因果的に予想された動きに等しくない場合、エンコーダは、そのマクロブロックをスキップしない（１８４０）。そうでない場合には、エンコーダは、そのマクロブロックについて符号化すべき残差があるかどうか検査する（１８５０）。コード化すべき残差がある場合、エンコーダは、そのマクロブロックをスキップしない（１８６０）。しかし、そのマクロブロックについて残差がない場合、エンコーダは、そのマクロブロックをスキップする（１８７０）。エンコーダは、符号化を終えるまで、引き続きマクロブロックを符号化またはスキップする（１８８０）。
【０１１２】
Ｂ．ビットプレーンコード化
第２の実施例において、（スキップマクロブロックを示すことを含む）ある種のマクロブロック特有の情報を、マクロブロック当たり１ビットで符号化することができる。フレーム内のマクロブロックすべてについての状況を、ビットプレーンとして一緒にコード化し、フレームヘッダ内で送信することができる。
【０１１３】
第２の実施例において、エンコーダは、フレーム内のマクロブロックについての情報を示すために、３つの場合でビットプレーンコード化を使用する。３つの場合とは、１）スキップマクロブロックを示すこと、２）フィールドまたはフレームマクロブロックモードを示すこと、および３）各マクロブロックについて１ＭＶまたは４ＭＶ動きベクトルモードを示すことである。このセクションは、３つの場合のいずれかについてのビットプレーンコード化、およびそれに対応する復号について述べる。
【０１１４】
フレームレベルのビットプレーンコード化は、２次元バイナリ配列を符号化するために使用される。各配列のサイズは、ｒｏｗＭＢ×ｃｏｌＭＢであり、ｒｏｗＭＢおよびｃｏｌＭＢは、それぞれマクロブロックの行と列の数である。各配列は、ビットストリーム内で、１組の連続したビットとしてコード化される。表３に列挙するが、以下に説明するように、各配列を符号化するために７つのモードの１つが使用される。
【０１１５】
【表３】
2010283893.tif 000005
【０１１６】
第２の実施例において、エンコーダは、ビットプレーン内に情報を埋め込むために、ＭＯＤＥ、ＩＮＶＥＲＴ、ＤＡＴＡＢＩＴＳという３つの構文要素を使用する。
【０１１７】
ＭＯＤＥフィールドは、ビットプレーンについてのコード化を符号化する可変長符号（ＶＬＣ）である。たとえば、ＭＯＤＥフィールド内のＶＬＣは、表３に列挙されている７つのコード化モードのいずれかを表す。ビットを節約するために、より可能性の高いコード化モードにより短いコードを、あまり可能性の高くないコード化モードにより長いコードを割り当てることができる。上記で指摘したように、ＭＯＤＥフィールドは、フレームヘッダ内で送信することができる。
【０１１８】
エンコーダ／デコーダは、フレーム毎にコード化モード間で切り換える。たとえば、エンコーダ／デコーダは、第１の実施例のエンコーダ／デコーダがそれぞれ図１０および１１において、スキップマクロブロックコード化モード間で切り換えたように、コード化モード間で切り換える。またはこれに替えて、エンコーダ／デコーダは、他の技法を使用して、および／または何らかの他の基準に基づいて切り換える。
【０１１９】
モードが非圧縮モードでない場合、１ビットのＩＮＶＥＲＴフィールドが送信される。条件反転を実施することができるいくつかのコード化モードでは、ＩＮＶＥＲＴフィールドは、エンコーダ内で符号化が行われる前にビットプレーン内のビットを反転すべきかどうか、およびデコーダ内の復号の出力を反転すべきかどうかを示す。ビットプレーン内の大部分のビットが１に等しいときＩＮＶＥＲＴフィールドは１であり、ビットプレーン内の大部分のビットが０に等しいとき０である。エンコーダは、０がより多く存在するとき消費するビットがより少ないいくつかのコード化モード（ノーマル２およびノーマル６など）を使用する。符号化すべきビットプレーンで０より１が多い場合、エンコーダは、ビットプレーンを反転し、ビットプレーン内の０の割合を増やし、より多くのビットを節約する可能性が高くなる。他のモード（Ｄｉｆｆ−２およびＤｉｆｆ−６など）は、ＩＮＶＥＲＴの値を使用し、プレディクタビットプレーンを計算する。したがって、いくつかのコード化モードでは、デコーダ部で再構築される最終ビットプレーンがＩＮＶＥＲＴによって決まる。
【０１２０】
ＭＯＤＥフィールドおよびＩＮＶＥＲＴフィールドが与えられれば、ＤＡＴＡＢＩＴＳフィールドは、ビットプレーンを再構築するのに必要な情報を含むＶＬＣシンボルのエントロピー符号化済みストリームである。
【０１２１】
Ｃ．コード化モード
第２の実施例において、エンコーダは、行スキップモード、列スキップモード、ノーマル２モード、ノーマル６モード、Ｄｉｆｆ−２モード、Ｄｉｆｆ−６モード、非圧縮モードという７つの異なるコード化モードのいずれかでバイナリ情報（たとえば、スキップマクロブロック情報）を符号化する。デコーダは、７つのコード化モードのいずれかについて対応する復号を実行する。各モードについて以下で詳しく述べる。
【０１２２】
またはこれに替えて、エンコーダ／デコーダは、他の、および／または追加のコード化モードを使用する。
【０１２３】
１．行スキップモードおよび列スキップモード
行スキップコード化モードは、行の各バイナリシンボルがある種の値のものである場合に、ビットプレーン内のビットを単一のビットで表すことによってビットを節約する。たとえば、エンコーダは、スキップモードをビットプレーン内の０で表し、全面的に０の行を単一のビットで表す行スキップコード化モードを使用する。したがって、エンコーダは、マクロブロックの行全体がスキップされるときビットを節約する。デコーダは、対応する復号を実行する。
【０１２４】
第２の実施例において、全面的にゼロの行は、０に設定された１ビットを使用して示される。行が全面的にゼロでないとき、１ビットインジケータは、１に設定され、この後に、ビットプレーンを含むｃｏｌＭＢビットが順序正しく続く。行は自然な順序で走査される。
【０１２５】
同様に、列スキップモードについては、列全体がゼロである場合、０ビットが送信される。そうでない場合は、１が送信され、その後に、列全体を含むｒｏｗＭＢビットが順序正しく続く。列は自然な順序で走査される。
【０１２６】
Ｄｉｆｆ−６モードおよびノーマル６モード（後述）での残りの行および／または列のコード化については、同じ論理が適用される。１ビットフラグは、行または列が全面的ゼロであるかどうかを示す。全面的にゼロでない場合、シンボル当たり１つのビットを使用して行または列全体が送信される。
【０１２７】
エンコーダが、主に１からなるビットプレーンを符号化するときは、行スキップおよび列スキップコード化は、通常、行／列が全体的に０からなる可能性がより低いため、あまり効率的でない。しかし、そのような場合に、エンコーダはビットプレーンに対して反転を実行して、０の割合を増やし、および潜在的にビット節約を高めることができる。したがって、ＩＮＶＥＲＴビットによって条件反転が示されているとき、エンコーダは、ビットプレーンがタイル化およびコード化される前に、ビットプレーンを予め反転する。デコーダ側では、最終出力の逆を取ることによって条件反転が実行される（これは、Ｄｉｆｆ−２およびＤｉｆｆ−６モードについては実行されない）。
【０１２８】
図１９は、行スキップコード化モードでビットプレーン内のバイナリ情報を符号化するための技法（１９００）を示す。最初に、エンコーダは、ビットプレーンの反転が適切かどうか検査し、適切である場合は反転を実行する（１９１０）。次いで、エンコーダは、ビットプレーン内の行を検査し、その行内の各ビットが０に等しいかどうか確認する（１９２０）。０に等しい場合、エンコーダは、その行についてのインジケータビットを０に設定する（１９３０）。行内のビットのいずれかが０でない場合、エンコーダは、その行についてのインジケータビットを１に設定し、その行内の各ビットを１つのビットで符号化する（１９４０）。エンコーダがビットプレーン内の行すべてを符号化し終えると（１９５０）、ビットプレーンの符号化が終了する。
【０１２９】
デコーダは、行スキップコード化モードについて対応する復号を実行する。
【０１３０】
図２０は、列スキップコード化モードでバイナリ情報を符号化するための技法を示す。最初に、エンコーダは、ビットプレーンの反転が適切かどうか検査し、適切である場合は反転を実行する（２０１０）。次いで、エンコーダは、ビットプレーン内の列を検査し、その列内の各ビットが０に等しいかどうか確認する（２０２０）。０に等しい場合、エンコーダは、その列についてのインジケータビットを０に設定する（２０３０）。列内のビットのいずれかが０でない場合、エンコーダは、その列についてのインジケータビットを１に設定し、その列内の各ビットを１つのビットで符号化する（２０４０）。エンコーダがビットプレーン内の列すべてを符号化し終えると（２０５０）、ビットプレーンの符号化が終了する。
【０１３１】
デコーダは、列スキップコード化モードについて対応する復号を実行する。
【０１３２】
２．ノーマル２モード
エンコーダは、ノーマル２モードを使用して（たとえば、ベクトルハフマンまたは他の可変長符号化方式を使用して）ビットプレーン内で複数のバイナリシンボルを一緒に符号化する。エンコーダは、可変長符号で１対のバイナリシンボルを符号化する。デコーダは、対応する復号を実行する。
【０１３３】
ｒｏｗＭＢ×ｃｏｌＭＢが奇数である場合、第１のシンボルが単一のビットとして符号化される。後続のシンボルは、自然な走査順で対毎に符号化される。シンボル対を符号化するためにＶＬＣテーブルが使用され、全体的なエントロピーを削減する。
【０１３４】
ＩＮＶＥＲＴビットによって条件反転が示されているときは、エンコーダは、ビットプレーンが対毎にコード化される前に、ビットプレーンを予め反転する。デコーダ側では、最終出力の逆を取ることによって条件反転が実行される（Ｄｉｆｆ−２モードが使用されているとき、このステップで条件反転は実行されない）。
【０１３５】
図２１は、ノーマル２モードでバイナリ情報を符号化するための技法（２１００）を示す。エンコーダは、初期検査を実行し、コード化効率を改善するためにビットプレーンの反転が適切であるかどうか判定し、適切である場合は反転を実行する（２１１０）。次いで、エンコーダは、コード化されるビットプレーンが奇数のバイナリシンボルを有するかどうか判定する（２１２０）。奇数である場合、エンコーダは、単一のビットで第１のシンボルを符号化する（２１３０）。次いで、エンコーダは、より可能性の高い対を表すためにより短いコードを使用し、あまり可能性の高くない対を表すためにはより長いコードを使用して可変長符号でシンボル対を符号化する（２１４０）。シンボル対の符号化を終えると（２１５０）符号化が終了する。
【０１３６】
デコーダは、ノーマル２コード化モードについて対応する復号を実行する。
【０１３７】
３．ノーマル６モード
エンコーダはまた、ノーマル６モードを使用して（たとえば、ベクトルハフマンまたは他の可変長符号化方式を使用して）ビットプレーン内で複数のバイナリシンボルを一緒に符号化する。エンコーダは、６つのバイナリシンボルのグループをタイル化し、各グループを可変長符号で表す。デコーダは、対応する復号を実行する。
【０１３８】
ノーマル６モード（およびＤｉｆｆ−６モード）では、ビットプレーンが６つの画素のグループで符号化される。これらの画素は、２×３または３×２のタイルの形にグループ化される。ビットプレーンは、１組の規則を使用して最大限にタイル化され、残りの画素は、行スキップモードおよび列スキップモードの変形モードを使用して符号化される。
【０１３９】
第２の実施例において、ｒｏｗＭＢが３の倍数であり、ｃｏｌＭＢが３の倍数でない場合のみ、３×２の「垂直」タイルが使用される。そうでない場合は、２×３の「水平」タイルが使用される。図２２、２３、２４は、ノーマル６コード化モードでタイル化されたフレームの諸例を示す図である。図２２は、３×２垂直タイル群と、列スキップモードでコード化される１シンボル幅残部（陰影付き領域として示される）とを有するフレーム（２２００）を示す図である。図２３は、２×３水平タイル群と、行スキップモードでコード化される１シンボル幅残部とを有するフレーム（２３００）を示す図である。図２４は、２×３水平タイルと、行スキップモードおよび列スキップモードでコード化される１シンボル幅残部群とを有するフレーム（２４００）を示す図である。
【０１４０】
この例では３×２と２×３のタイルが使用されているが、他の実施形態では、異なる構成のタイルおよび／または異なるタイル化規則が使用される。
【０１４１】
最初に６個要素タイルが符号化され、その後に列スキップおよび行スキップ符号化された線形タイルが続く。配列サイズが３×２または２×３の倍数である場合、後者の線形タイルは存在せず、ビットプレーンが完璧にタイル化される。６個要素の矩形タイルは、ＶＬＣテーブルを使用して符号化される。
【０１４２】
ＩＮＶＥＲＴビットによって条件反転が示されているとき、エンコーダは、ビットプレーンがタイル化およびコード化される前に、ビットプレーンを予め反転する。デコーダ側では、最終出力の逆を取ることによって条件反転が実施される（Ｄｉｆｆ−６モードが使用されているとき、このステップで条件反転は実行されない）。
【０１４３】
図２５は、ノーマル６モードでバイナリ情報を符号化するための技法（２５００）を示すフローチャートである。エンコーダは、初期検査を実行し、コード化効率を改善するためにビットプレーンの反転が適切であるかどうか判定し、適切である場合は、反転を実行する（２５１０）。次いで、エンコーダは、ビットプレーン内の行の数が３の倍数であるかどうか検査する（２５２０）。行の数が３の倍数でない場合、エンコーダは、ビットプレーン内のシンボルを２×３水平タイルの形にグループ化する（２５３０）。
【０１４４】
行の数が３の倍数である場合、エンコーダは、ビットプレーン内の列の数が３の倍数であるかどうか検査する（２５４０）。列の数が３の倍数である場合、エンコーダは、ビットプレーン内のシンボルを２×３水平タイルの形にグループ化する（２５３０）。列の数が３の倍数でない場合、エンコーダは、シンボルを３×２垂直タイルの形にグループ化する（２５５０）。
【０１４５】
シンボルを３×２または２×３のタイルの形にグループ化した後に、エンコーダは、６次元ベクトルハフマン符号化または何らかの他のコード化技法などの技法を使用して、６個タイル化済みシンボルのグループを符号化する。エンコーダは、残りのタイル化されていないシンボルを、上述の行スキップおよび／または列スキップコード化技法を使用して符号化する（２５７０）。
【０１４６】
デコーダは、ノーマル６コード化モードについて対応する復号を実行する。
【０１４７】
他の実施形態において、エンコーダは、他の技法を使用し、タイル化されたシンボル、およびタイル化されていないシンボルをコード化する。
【０１４８】
４．Ｄｉｆｆ−２およびＤｉｆｆ−６モード
Ｄｉｆｆ−２モードまたはＤｉｆｆ−６モードなど差分符号化モードは、最初に、コード化すべきビットプレーンについてのプレディクタに基づいて、コード化すべきビットプレーンについて差分（または残留）ビットのビットプレーンを生成することによってビットプレーンを符号化する。次いで、残留ビットプレーンは、条件反転なしで、たとえばノーマル２またはノーマル６コード化モードを使用して符号化される。
【０１４９】
第２の実施例において、Ｄｉｆｆ−２モードまたはＤｉｆｆ−６モードは、演算ｄｉｆｆによって示される差分符号化を使用する。どちらかの差分モードが使用される場合、最初に、ビットプレーンｂ（ｉ，ｊ）のプレディクタ
【０１５０】
【数１】
2010283893.tif 000006
【０１５１】
すなわち、因果演算
【０１５２】
【数２】
2010283893.tif 000007
【０１５３】
として定義されるものを調べることによって、差分ビットのビットプレーンが生成される。
【０１５４】
換言すれば、所与のバイナリシンボルｂ（ｉ，ｊ）のプレディクタ
【０１５５】
【数３】
2010283893.tif 000008
【０１５６】
は、すぐ左側のバイナリシンボルｂ（ｉ−１，ｊ）となるが、以下の特別な場合を除く。
１）ｂ（ｉ，ｊ）がビットプレーンの左上隅にある場合、または上方のバイナリシンボルｂ（ｉ，ｊ−１）が左側のバイナリシンボルｂ（ｉ−１，ｊ）に等しくない場合、プレディクタ
【０１５７】
【数４】
2010283893.tif 000009
【０１５８】
は、ＩＮＶＥＲＴの値に等しい、または、
２）１）が当てはまらず、ｂ（ｉ，ｊ）が左列にある場合（ｉ＝＝０）、プレディクタ
【０１５９】
【数５】
2010283893.tif 000010
【０１６０】
は、上方のバイナリシンボルｂ（ｉ，ｊ−１）になる。
【０１６１】
エンコーダ側では、
【０１６２】
【数６】
2010283893.tif 000011
【０１６３】
に従って、ｄｉｆｆ演算により残留ビットプレーンｒが計算される。上式で、
【０１６４】
【数７】
2010283893.tif 000012
【０１６５】
は、排他的論理和演算である。残留ビットプレーンは、条件反転なしで、ノーマル２モードまたはノーマル６モードを使用して符号化される。
【０１６６】
デコーダ側では、適切なノーマルモードを使用して残留ビットプレーンが再生成される。その後に、残留ビットプレーンが使用され、バイナリ２Ｄ差
【０１６７】
【数８】
2010283893.tif 000013
【０１６８】
として元のビットプレーンを再生成する。
【０１６９】
図２６は、差分符号化モードでバイナリ情報を符号化するための技法（２６００）を示す。エンコーダは、たとえば式１に示されているように、ビットプレーンについてプレディクタを計算する（２６１０）。次いで、エンコーダは、たとえばビットプレーンとそのプレディクタに対してＸＯＲ演算を実行することによって残留ビットプレーンを計算する（２６２０）。次いで、エンコーダは、残留ビットプレーンを（たとえば、ノーマル２またはノーマル６モードで）符号化する（２６３０）。
【０１７０】
図２７は、差分符号化モードで符号化されたバイナリ情報を復号するための技法（２７００）を示す。デコーダは、残留ビットプレーンを符号化するために使用されたモード（たとえば、ノーマル２またはノーマル６モード）に基づいて、適切な復号技法を使用して残留ビットプレーンを復号する（２７１０）。また、デコーダは、エンコーダ内で使用され同じ技法を使用して、ビットプレーンについてプレディクタを計算する（２７２０）。次いで、デコーダは、たとえば復号された残留ビットプレーンとプレディクタビットプレーンに対してＸＯＲ演算を実行することによって、元のビットプレーンを再構築する（２７３０）。
【０１７１】
５．非圧縮モード
非圧縮モードを除くすべてのモードがビットプレーンをフレームレベルで符号化するが、これは、符号化中にフレームを介した第２の経路を必要とする。しかし、低遅延（ｌｏｗ−ｌａｔｅｎｃｙ）の環境下では、第２の経路によって受け入れることができない遅延（ｌａｔｅｎｃｙ）が付加される可能性がある（というのは、たとえば、ビットプレーンを符号化して費やされる時間のために、フレーム内の最後のマクロブロックに達するまでフレームヘッダおよびマクロブロック層情報の送信が遅れるからである）。
【０１７２】
非圧縮モードは、残りのマクロブロックレベル情報と同じビットストリーム内の位置で、バイナリシンボル当たり１つのビットでビットプレーンを符号化する従来の方法を使用する。シンボルのマクロブロックレベルのコード化は、それ自体新しい概念ではないが、シンボルのコード化をフレームレベルからマクロブロックレベルに切り換えることにより、フレームレベルのコード化に対して低遅延とすることができる。
【０１７３】
図２８は、低遅延の応用例のために、マクロブロックについてのバイナリ情報を非圧縮コード化モードで選択的に符号化するための技法（２８００）を示す。最初に、エンコーダは、バイナリ情報を符号化するために非圧縮モードを使用するかどうか検査する（２８１０）。使用する場合、エンコーダは、マクロブロックについてマクロブロックレベルでビットを符号化し（２８２０）、そのマクロブロックがフレーム内の最後のマクロブロックかどうか検査する（２８３０）。マクロブロックがフレーム内の最後のマクロブロックでない場合、エンコーダは、マクロブロックレベルで次のマクロブロックについてビットを符号化することにより続行する（２８２０）。
【０１７４】
エンコーダが非圧縮コード化モードを使用しない場合、エンコーダは、フレーム内のマクロブロックについて、フレームレベルでビットプレーンを符号化する（２８４０）。フレーム内のマクロブロックの符号化を終えると（２８５０）そのフレームについて符号化が終了する。
【０１７５】
この技法（２８００）は、フレーム毎にモードを切り換えることを示しているが、またはこれに替えて、エンコーダは、何らかの他の基準に基づいて切り換えることとなる。
【０１７６】
以上、様々な実施形態を参照しながら本発明の原理について述べ、また例示したが、この様々な実施形態は、そのような原理から逸脱することなしに、構成および詳細に修正を加えることができることを理解されたい。本明細書に説明するプログラム、プロセス、または方法は、別段の表示がない限り、どの特定のタイプのコンピューティング環境にも関連しない、あるいは制限されないことを理解されたい。様々なタイプの汎用または専用のコンピューティング環境は、本明細書に説明する技法と共に使用することができ、あるいは、それに従って動作を実行することができる。ソフトウェアで示されている実施形態の要素は、ハードウェアで実施することができ、逆も同様である。
【０１７７】
本発明の原理を適用することができる多数の可能な実施形態に鑑みて、本発明者等は、以下の特許請求の範囲とその等価物の範囲および精神内に入るそのような実施形態すべてを本発明として主張する。
【図１】
2010283893.tif 000014
【図２】
2010283893.tif 000015
【図３】
2010283893.tif 000016
【図４】
2010283893.tif 000017
【図５】
2010283893.tif 000018
【図６】
2010283893.tif 000019
【図７】
2010283893.tif 000020
【図８】
2010283893.tif 000021
【図９】
2010283893.tif 000022
【図１０】
2010283893.tif 000023
【図１１】
2010283893.tif 000024
【図１２】
2010283893.tif 000025
【図１３】
2010283893.tif 000026
【図１４】
2010283893.tif 000027
【図１５】
2010283893.tif 000028
【図１６】
2010283893.tif 000029
【図１７】
2010283893.tif 000030
【図１８】
2010283893.tif 000031
【図１９】
2010283893.tif 000032
【図２０】
2010283893.tif 000033
【図２１】
2010283893.tif 000034
【図２２】
2010283893.tif 000035
【図２３】
2010283893.tif 000036
【図２４】
2010283893.tif 000037
【図２５】
2010283893.tif 000038
【図２６】
2010283893.tif 000039
【図２７】
2010283893.tif 000040
【図２８】
2010283893.tif 000041