説明

ビデオ・データ・ストリームの符号化および復号化における記憶装置の効率的使用法

【課題】フレームのデータを記憶構造内で編成することによってフレームの符号化/復号化を容易にする。
【解決手段】フレームのスライスに対して割り当てられた記憶構造の一部において、使用される区画エントリが割り当てられた部分の第1のセクション内に記憶され、使用されない区画エントリが割り当てられた部分の第2のセクション内に記憶され、第1および第2のセクションはそれぞれ記憶構造内の記憶の連続した領域を含み、使用される区画エントリが使用されない区画エントリと一緒に分散化されないようにする。ビデオ・データの符号化または復号化において有用な追加のデータが決定されて使用される区画エントリの使用されないバイト内に記憶される。マクロブロックの2つ以上の同一の区画を1つの区画内に一体化する。

【発明の詳細な説明】
【技術分野】
【0001】
(関連出願)
本出願は、2004年6月27日出願の出願番号60/583,447の「画像の符号化および復号化」(Encoding and Decoding Images)という名称の米国仮特許出願に対する利益を主張する。
(技術分野)
本発明は、ビデオ・データ・ストリームの符号化および復号化における記憶装置の効率的使用法に関する。
【背景技術】
【0002】
ビデオ・コーデック(COmpressor‐DECompressor)は、ビデオ・データ・ストリームを符号化/圧縮および復号化/解凍して伝送を高速化し、記憶装置の空間を小さくするようにストリームのサイズを減らすために設計された圧縮アルゴリズムである。損失はあるが、ビデオ・コーデックはビデオ・ストリームのバイナリ・データを圧縮しながらビデオの品質を維持しようとする。一般的なビデオ・コーデックの例としては、MPEG‐4、AVI、WMV、RM、RV、H.261、H.263およびH.264がある。
【0003】
ビデオ・ストリームは一連のビデオ・フレームから構成され、各フレームは複数のマクロブロックから構成されている。ビデオ・コーデックは整数個のマクロブロックを含んでいる1つまたは複数のスライスまたはサブ部分にフレームを分割することによってその一連のフレームで各フレームを符号化する。1つのマクロブロックは、通常、画素の16×16アレイであり(他のサイズのマクロブロックも可能であるが)、符号化および復号化のために区画(partition)に分割することができる。一例として、図1は、H.264圧縮規格における、マクロブロックを区画化することができる異なる方法を示す。
【0004】
図1に示すように、1つのマクロブロックは以下のように259種類の可能な方法のうちの1つで区画化することができる。
1. 1つの区画
2. 2つの垂直方向の区画
3. 2つの水平方向の区画
4. 4つのより小さな四角形の区画
最後のケースにおいては、結果としての四角形の各区画を、1つのマクロブロックに対する最大16個の区画にまで同様な方法で(マクロブロックを区画化するための他の256種類の方法を勘定して)区画化することができる。
【0005】
マクロブロックの内容は自己充足型とするか、または1つまたは2つの異なるフレームから予測されるようにすることができる。受信されたビット・ストリーム(符号化プロセスの間に生成された)において、次の予測情報を各区画に対して導き出すことができる。それらは、運動ベクトル(xおよびyの成分から構成されている)およびその運動ベクトルがベースとしているフレーム(一連のフレーム内の)に対して関連付けられた指示子である。この指示子は、例えば、関連付けられた基準フレーム・リストと結合して使用される基準フレーム・インデックスであってよく、その運動ベクトルがどの特定のフレームをベースとしているかどうかを示す。
【0006】
図2は、基準フレーム・インデックスおよび基準フレーム・リストの概念を示す。1つのフレームの各スライスに対して、運動ベクトルに対して特定のフレームを識別するために使用される1つまたは複数の基準フレーム・リストが記憶されている。図2の例においては、運動ベクトルに対して特定のフレームを識別するために第1および第2の基準フレーム・リストが使用されている。通常、スライスが受信される時、そのスライスのヘッダはフレーム基準リストを導き出すための情報を含んでいる。
【0007】
1つの運動ベクトルに関連付けられた基準フレーム・インデックスは、1つの基準フレーム・リスト内の1つのエントリ(フレーム番号を含む)を規定し、それは一連のフレームでその運動ベクトルがベースとしているフレームを指す。図2の例においては、0から6までの番号が付けられている7個のアクティブ・フレーム(すなわち、記憶装置内に現在保持されているフレーム)がある。「3」と番号が付けられているフレームが現在処理されている。基準フレーム・インデックスが関連付けられた第1の運動ベクトルに対して0の値を指定する場合、これはその第1の基準フレーム・リストの第1のエントリ内のフレーム番号が、その運動ベクトルがベースとしているフレームであることを示す。従って、図2の例に示すように、「2」の番号が付けられたフレームは第1の運動ベクトルがベースとしているフレームである。さらに、もう1つの例として、基準フレーム・インデックスが関連付けられた第2の運動ベクトルに対する2の値を指定している場合、これは第2の基準フレーム・リスト(第2の運動ベクトルに対する)の第3のエントリ内のフレーム番号が、第2の運動ベクトルがベースとしているフレームであることを示す。従って、図2の例に示すように、「6」と番号付けられているフレームは第2の運動ベクトルがベースとしているフレームである。
【0008】
図3は、1つのフレームの1つのスライスに対する区画データを含んでいる通常の記憶構造305の概念図を示す。図3の例においては、そのスライスは3つのマクロブロックから構成されており、この場合、第1のマクロブロック(マクロブロック0)は1つの区画から構成されており、第2のマクロブロック(マクロブロック1)は16個の区画から構成されており、そして第3のマクロブロック(マクロブロック2)は2個の区画から構成されている。
【0009】
通常、復号化時に記憶装置はそのスライスの各マクロブロックが最大個数の区画(例えば、H.264規格では16個の区画)に分割されることを仮定する「最悪ケースのシナリオ」でスライスに対して割り当てられる。従って、H.264規格の場合、スライスの各マクロブロックに対して、1つのヘッダおよび16個の区画エントリに対して十分な記憶空間が割り当てられている。1つのデータ構造の区画エントリはフレームの復号化時に区画データを記憶する。各区画エントリは1つの区画に対するデータ(例えば、運動ベクトルおよび基準フレーム・インデックス・データ)を含んでいる。
【0010】
図3の図はそのスライスに対して割り当てられた記憶構造の割り当てられた部分310を示す。1つのスライスの各マクロブロックは、通常、16個の区画には分割されないので、1つのマクロブロックにはそのマクロブロック内に含まれている区画より多い区画エントリに対する記憶が割り当てられることが多い。従って、1つのマクロブロックに対する記憶構造の割り当てられた部分は1つまたは複数の使用されない区画エントリ(そのマクロブロックの1つの区画に対するデータを含んでいないエントリ)以外に、通常、1つまたは複数の使用される区画エントリ(そのマクロブロックの実際の区画に対するデータを含んでいるエントリ)を含んでいる。使用される区画エントリは意味のある/有用なデータ(例えば、1つの区画に対する運動ベクトルおよび基準フレーム・インデックスなど)を含み、一方、使用されない区画エントリは意味のある/有用なデータを含まない。
【0011】
図3に示すように、その区画の各マクロブロックに対して、その記憶構造はヘッダ・セクションと区画エントリ・セクションを含んでいる。通常、復号化時に、1つのヘッダに対して、そのマクロブロックが16個の区画に分割されることを仮定する「最悪ケースのシナリオ」ベースで記憶が割り当てられる。従って、各マクロブロック・ヘッダに対して、16個のヘッダ区画エントリのための十分な記憶空間が割り当てられている。マクロブロックに対する従来のヘッダはそのマクロブロックがどのように区画化されているかを記述しているデータを含んでいる。そのような記述データは、例えば、各区画の位置および寸法のデータを含む。図4は、マクロブロック2に対する記憶構造内に記憶されている従来のヘッダ405の概念図を示す。マクロブロック2は2個の区画に分割されている。従って、そのヘッダはそれぞれが特定の区画の記述データを含む2個の使用されるヘッダ区画エントリを含むことになる。残りの14個のヘッダ区画エントリは空(使用されない)になる。さらに、各ヘッダはそのマクロブロック内の区画の数を示すデータを含んでいる。
【0012】
図3に示すように、記憶構造305の第1の部分315はマクロブロック0に対するデータを含んでいる。マクロブロック0は1個の区画から構成されているので、その記憶構造はマクロブロック0の第1の区画だけに対する使用される区画エントリ(区画エントリ0)を含み、一方、マクロブロック0に対して割り当てられている残りの15個の区画エントリ(区画エントリ1〜15)は使用されないエントリである。記憶構造305の第2の部分320はマクロブロック1に対するデータを含んでいる。マクロブロック1は16個の区画から構成されているので、その記憶構造はマクロブロック1の第1から第16の区画に対して使用される区画エントリ(区画エントリ0〜15)を含み、マクロブロック1に対して割り当てられるすべてのエントリが使用されるようになっている。記憶構造305の第3の部分325は、マクロブロック2に対するデータを含んでいる。マクロブロック2は2個の区画から構成されているので、その記憶構造はマクロブロック2の第1および第2の区画に対して使用される区画エントリを含み、一方、マクロブロック2に対して割り当てられている残りの14個の区画エントリは使用されない。
【0013】
従って、このスライスに対する区画データは、通常、使用されない区画エントリが使用される区画エントリと一緒に分散している偶然のパターンで記憶構造内に記憶されている。記憶構造内のデータ記憶のこの偶然のパターンによって、スライスの復号化が非効率となる。これはCPUが復号化時に記憶装置から区画データをロードしている時に、CPUがその時点で必要とする正確なデータだけでなく、その記憶構造からメモリのチャンク(隣接している区画データなど)を取り出すという事実に起因している。その取り出されたデータのチャンクは使用される区画エントリおよび使用されない区画エントリを含んでいる可能性がある。そのデータの取り出されたチャンクはキャッシュ(例えば、CPUキャッシュ)内に記憶され、CPUは迅速に(通常、CPUが記憶構造にアクセスできるより大幅に短い時間で)アクセスすることができる。
【0014】
そのスライスの処理の間に、CPUが後で特定の区画データを必要とする場合、CPUはその特定の区画データがそのキャッシュ内に存在するかどうかを判定する。何故なら、その特定の区画データが以前に取り出されたデータのチャンク内に含まれていた可能性があり、そのキャッシュに対するアクセス時間は記憶構造に対するアクセス時間より短いからである。特定の区画データがキャッシュ内に存在した場合、これは「キャッシュ・ヒット」と呼ばれ、その場合、その特定の区画データのキャッシュからの取り出しは速い。その特定の区画データがキャッシュ内に存在しなかった場合、これは「キャッシュ・ミス」と呼ばれ、その時はCPUはより低速である記憶構造からその特定の区画データを取り出さなければならない。
【0015】
使用されない区画エントリが使用される区画エントリと一緒に分散している偶然の方法で記憶構造内に記憶されている時、通常、そのスライスの処理時に「キャッシュ・ミス」のレートが高くなる。何故なら、その取り出された区画のチャンクは、使用される区画エントリと一緒に分散している使用されない区画エントリをも含み、その使用されない区画エントリは有用なデータを含んでいないからである。
【先行技術文献】
【特許文献】
【0016】
【特許文献1】米国仮出願第60/583,447号
【発明の概要】
【発明が解決しようとする課題】
【0017】
従って、区画データのより効率的な処理を可能にする記憶構造内に区画データを編成する方法に対するニーズが存在する。
【課題を解決するための手段】
【0018】
本発明のいくつかの実施形態は、記憶構造内のフレームのデータを新しい方法で編成することによって、フレームの符号化/復号化を容易にする。より詳細には、1つのフレームのスライスに対して割り当てられた記憶構造の一部分において、使用されるエントリ(有用なデータを含むエントリ)がその割り当てられた部分の第1のセクションに記憶され、そして使用されない区画エントリ(有用なデータを含んでいないエントリ)は、その割り当てられた部分の第2のセクションに記憶され、第1および第2のセクションはその記憶構造内の連続で隣接した記憶領域を含んでいる。いくつかの実施形態においては、使用される区画エントリはその記憶構造の割り当てられた部分のうちの第1のセクション内に「パック」され、一方、使用されない区画エントリはその割り当てられた部分の残りを占有する。
【0019】
いくつかの実施形態においては、ビデオ・データの符号化または復号化において有用な追加のデータが判定/識別され、使用される区画エントリの使用されないバイト内に記憶される。いくつかの実施形態においては、1つのマクロブロックに対するヘッダ・データがそのマクロブロックの特定の区画エントリ(例えば、そのマクロブロックの第1の区画に対する第1の区画エントリ)に記憶される。これらの実施形態においては、そのヘッダ・データは区画エントリの区画データと統合化されている。いくつかの実施形態においては、カノニカルな基準フレーム・インデックス・データが計算され、使用される区画エントリの使用されないバイト内に記憶される。いくつかの実施形態は、1つのマクロブロックの区画が比較されてそのマクロブロックの任意の区画が同じであるかどうかが判定され、それにより同一の区画はそのマクロブロックの1つの区画内に一体化される。
【図面の簡単な説明】
【0020】
【図1】図1は、1つのマクロブロックをH.264圧縮規格で区画化することができる異なる方法を示す。
【図2】図2は、基準フレーム・インデックスおよび基準フレーム・リストの概念を示す。
【図3】図3は、1つのフレームのスライスに対する区画データを含む従来の記憶構造の概念図を示す。
【図4】図4は、記憶構造内に記憶されている従来のヘッダの概念図を示す。
【図5】図5は、1つのフレームの復号化時に区画データを記憶するデータ構造の区画エントリの組成を示す。
【図6】図6は、1つのフレームのスライスに対する区画データを含む記憶構造の概念図を示し、その区画データは本発明による記憶構造内に編成されている。
【図7】図7は、図6に示されている記憶構造の割り当てられた部分に関連付けられているロケータ・リストの概念図を示す。
【図8】図8は、1つのビデオ・フレームのスライスに対するデータを記憶するための方法のフローチャートである。
【図9】図9は、エントリの6個の使用されていないバイト内に有用なデータを含む区画エントリの組成を示す。
【図10】図10は、H.264規格に対するルックアップ・テーブルを示す。
【図11】図11は、1つのフレームのスライスに対する区画データを含む記憶構造の概念図を示し、ここでヘッダ・データが区画エントリ内に統合化されている。
【図12】図12は、統合化されたヘッダを使用したビデオ・フレームのスライスに対するデータを記憶するための方法のフローチャートである。
【図13】図13は、カノニカルな基準フレーム・リストの一例を示す。
【図14】図14は、カノニカルな基準フレーム・インデックスを使用して一連のフレーム内の1つのフレームのスライスの組に対するデータを記憶するための方法のフローチャートである。
【図15A】図15Aは、一体化された区画の例を示す。
【図15B】図15Bは、一体化された区画の例を示す。
【図16】図16は、マクロブロックの区画を一体化するための方法のフローチャートである。
【図17】図17は、本発明のいくつかの実施形態が実施されているコンピュータ・システムを表している。
【発明を実施するための形態】
【0021】
2004年6月27日出願の「画像の符号化および復号化」(Encoding and Decoding Images)という名称の米国仮出願第60/583,447号の内容は、参照により本明細書に明示的に組み込むものとする。
【0022】
本発明の以下の詳細な説明において、本発明の種々の詳細、例および実施形態が説明され記載される。しかし、本発明はその説明されている実施形態に限定されるものではないこと、本発明は説明されている特定の詳細および例のいくつかなしで実施できることは、当業者であれば明らかであろう。
【0023】
区画エントリ:
いくつかの実施形態においては、1つの区画に対する区画エントリはその区画の復号化を早めるために所定の長さを有するように整合されている。整合の問題のために、データは、通常、複数の特定個数のバイトに分割される。これらの実施形態においては、各区画エントリは同じ所定の個数のバイトとなるように整合される。
【0024】
図5は、1つのフレームの復号化時に区画データを記憶するデータ構造における区画エントリ500の組成を示す。各区画エントリは1つの区画に対するデータ(すなわち、運動ベクトルおよび基準フレーム・インデックス・データ)を含んでいる。図5に示されている例においては、1つの区画エントリの長さは16バイトである。図に示すように、第1の運動ベクトル505は4バイトのデータを含み、また、第2の運動ベクトル510に対するデータはその区画エントリ内に2バイトのデータ(1つの運動ベクトルの各xまたはy成分に対して2バイト)を含む。第1の基準フレーム・インデックス515に対するデータは1バイトを含み、そして第2の基準フレーム・インデックス520に対するデータもその区画エントリ内に1バイトのデータを含む。図5の例に示すように、区画エントリは16バイトであり、区画エントリは10個の使用されるバイトを含み、ここでそのエントリの6個のバイト525は、通常、空であって使用されない(すなわち、意味のある、または有用なデータを含まない)。
【0025】
符号化/復号化時の記憶装置の効率的使用法:
いくつかの実施形態においては、フレームのスライスの符号化/復号化を容易にするために、使用される区画エントリが使用されない区画エントリと一緒に分散化されないように、そのスライスのデータが記憶構造内で編成される。より詳細には、そのスライスに対して割り当てられた記憶構造の一部において、使用される区画エントリがその割り当てられた部分の第1のセクションに記憶され、そして使用されない区画エントリがその割り当てられた部分の第2のセクションに記憶され、第1および第2のセクションはそれぞれその記憶構造内の記憶の連続で隣接した領域を含んでいる。いくつかの実施形態においては、使用される区画エントリは記憶構造の割り当てられた部分の第1の所定のセクション内に「パックされ」、一方、使用されない区画エントリはその割り当てられた部分の残りを占める。
【0026】
記憶構造の割り当てられた部分には、その割り当てられた部分に含まれる区画エントリに対するインデックスのリストであるロケータ・リストが関連付けられている。より詳細には、ロケータ・リストは割り当てられた部分の区画エントリのロケーション情報(例えば、アドレス情報)を含んでいるインデックス(例えば、ポインタ)のリストを含む。ロケータ・リストは割り当てられた部分の特定のマクロブロックの特定の区画エントリを見つけるために、割り当てられた部分と結合して使用される。
【0027】
いくつかの実施形態においては、各マクロブロックに対するヘッダ・データは、使用される区画エントリが記憶されている割り当てられた部分の第1のセクションに記憶される。いくつかの実施形態においては、マクロブロックに対するヘッダ・データは第1のセクションに記憶されるが、そのマクロブロックのどの区画エントリからも分かれて記憶される。他の実施形態においては、マクロブロックに対するヘッダ・データはそのマクロブロックの特定の区画エントリ(例えば、そのマクロブロックの第1区画に対する最初の区画エントリ)内に記憶される。これらの実施形態においては、そのヘッダ・データは区画エントリの区画データと統合化されている。
【0028】
図6は、1つのフレームのスライスに対する区画データを含み、その区画データが本発明に従って記憶構造内で編成されている記憶構造605の概念図を示す。図6の例においては、そのスライスは図3の例の場合と同様に同じ3つのマクロブロックから構成されており、ここで第1のマクロブロック(マクロブロック0)は1個の区画から構成され、第2のマクロブロック(マクロブロック1)は16個の区画から構成され、第3のマクロブロック(マクロブロック2)は2個の区画から構成されている。
【0029】
そのスライスに対して割り当てられる記憶部分610のサイズはそのスライスの各マクロブロックに対して、1つのヘッダおよび16個の区画エントリ(ここで各区画エントリは16バイトのデータを含む)に対して十分な記憶空間が割り当てられているように「最悪ケースのシナリオ」に基づいて決定される。従って、マクロブロック0の場合、1つの使用されている区画エントリ(区画エントリ0)と15個の使用されていない区画エントリ(区画エントリ1〜15)があり、マクロブロック1に対しては、16個の使用されている区画エントリがあり、マクロブロック2に対しては、2個の使用されている区画エントリと14個の使用されていない区画エントリとがある。
【0030】
図6に示すように、そのスライスのすべてのマクロブロックの使用されている区画エントリはその記憶構造の割り当てられている部分の第1のセクション630に対して記憶され(「パックされ」)、一方、使用されない区画エントリがその割り当てられた部分の第2のセクション635(その割り当てられた部分の残り)に対して記憶されている。マクロブロック0の場合、そのヘッダ・データおよび使用される区画エントリ0がマクロブロック0に対する第1の「使用される」セクション630の部分分割615内にある。マクロブロック0に対する使用されない区画エントリ1〜15は、その割り当てられた部分の第2の「使用されない」セクション635内にある。マクロブロック1の場合、そのヘッダ・データおよび使用される区画エントリ0〜15がマクロブロック1に対する第1の「使用される」セクション630の部分分割620内にある。マクロブロック2の場合、そのヘッダ・データおよび使用される区画エントリ0〜1がマクロブロック2に対する第1の「使用される」セクション630の部分分割625内にある。マクロブロック2に対する使用されない区画エントリ2〜15は、その割り当てられた部分の第2の「使用されない」セクション635内にある。これは、記憶装置305の割り当てられた部分310全体を通じて使用される区画エントリと使用されない区画エントリとが分散している図3と対照的である。
【0031】
そのような方法で区画データを編成することによって、キャッシュ・ミスの発生が少なくなるので、そのスライスの復号化をより効率的に行うことができる。CPUがその割り当てられた部分の第1のセクションから区画データのチャンクを取り出す時、区画データの各チャンクは使用される区画エントリの全体またはそのほとんどから構成されることになる。何故なら、使用される区画エントリが第1のセクション内にパックされており、そして使用されない区画エントリが第2の別のセクション内にパックされているからである。これにより、キャッシュ・ミスがより少なくなる。何故なら、使用されている区画エントリからの意味のある/有用なデータの大部分をそのキャッシュが含んでいることになるからである。
【0032】
図7は、図6に示されている記憶構造605の割り当てられた部分610と関連付けられているロケータ・リスト705の画面図を示す。このロケータ・リストは割り当てられた部分で区画エントリを見つけるのに役立てるために使用されるロケーション情報(例えば、アドレス情報)を含んでいるインデックス(例えば、ポインタ)のリストである。ロケータ・リストは割り当てられた部分と結合して使用され、その割り当てられた部分の特定のマクロブロックの特定の区画エントリを見つけるのを助ける。
【0033】
いくつかの実施形態においては、1つのマクロブロックに対する1つのインデックスだけがロケータ・リスト705内に記憶されている。いくつかの実施形態においては、1つのマクロブロックの第1の区画に対する第1の区画エントリだけに対するインデックスがロケータ・リスト705内に記憶されている。これらの実施形態においては、そのリスト内のインデックスはそのスライス内のマクロブロック番号および、記憶構造605の割り当てられた部分610内のマクロブロックに対する第1の区画エントリのロケーション情報を識別する。例えば、図7に示すように、マクロブロック0に対するインデックスは割り当てられた部分610内のマクロブロック0に対する第1の区画エントリのロケーション情報を含んでいる。
【0034】
図8は、ビデオ・フレームのスライスに対するデータを記憶するための方法800のフローチャートである。方法800は、例えば、データ記憶構造を使用してビデオ・データ・ストリームを符号化または復号化するように構成されているアプリケーションによって実行することができる。
【0035】
方法800はビデオ・フレームのスライスに対するデータを受信する(805において)ことから開始し、そのスライスは2つ以上のマクロブロックを含み、各マクロブロックは1つまたは複数の区画を含む。そのスライスに対するデータはそのスライスのマクロブロックの区画に関連付けられた区画データ(例えば、運動ベクトルおよび基準フレーム・インデックス・データ)および、各マクロブロックに対するヘッダ・データを含む。オプションのステップとして、各マクロブロックに対して、その方法はマクロブロックの区画を比較し(807において)、同じ区画があればそれらをすべて一体化する(807において)(以下に説明されるように)。
【0036】
次に、方法800はスライスのデータを記憶するために記憶装置の一部を割り当て(810において)、その割り当てられた記憶の部分は区画エントリおよびマクロブロック・ヘッダに対して割り当てられた記憶部分を含んでいる。いくつかの実施形態においては、その割り当てられた記憶部分のサイズはそのスライスの各マクロブロックに対して割り当てられる区画エントリの所定の個数に従って決定される。いくつかの実施形態においては、割り当てられる記憶の部分のサイズは「最悪ケースのシナリオ」に基づいて決定され、そのスライスの各マクロブロックに対して、そのマクロブロック・ヘッダおよび16個の区画エントリに対して十分な記憶空間が割り当てられている。
【0037】
次に、その方法はそのスライスの区画に関連付けられた区画データをその割り当てられた区画エントリ(使用される区画エントリと呼ばれる)内に記憶する(812において)。オプションのステップとして、その方法は追加の有用な/意味のあるデータを、使用される区画エントリの使用されないバイト内に記憶する(813において)(以下に説明されるように)。いくつかの実施形態においては、その方法は統合化されたヘッダのデータまたはカノニカルな基準フレーム・インデックス・データを、使用される区画エントリ内に記憶する(813において)。いくつかの実施形態においては、その方法はその区画の符号化または復号化において有用である任意の他のデータを計算/識別して記憶する。
【0038】
次に、方法800は割り当てられた記憶部分の第1のセクション内に各マクロブロックに対するヘッダ・データを記憶する(815において)。また、方法800は使用される区画エントリを、割り当てられた記憶部分の第1のセクションに記憶/配置し(817において)、使用される区画エントリはそのスライスのマクロブロックの区画に対するデータを含んでいる。また、方法800は使用されない区画エントリ(1つの区画のデータを含んでいないエントリ)を、割り当てられた記憶部分の第2のセクションに記憶/配置する(820において)。いくつかの実施形態においては、第1および第2のセクションはそれぞれ割り当てられた記憶部分の連続した記憶の領域を含み、それにより、使用される区画エントリがその割り当てられた記憶部分で使用されない区画エントリと一緒に分散化されない。
【0039】
次に、方法800は割り当てられた記憶部分に関連付けられるロケータ・リストを生成し(825において)、そのロケータ・リストは割り当てられた部分の区画エントリに対するロケーション情報(例えば、アドレス情報)を含んでいるインデックス(例えば、ポインタ)のリストを含んでいる。ロケータ・リストは割り当てられた部分の特定のマクロブロックの特定の区画エントリを見つけるのを助けるために使用される。いくつかの実施形態においては、マクロブロックの第1の区画に対する第1のエントリだけに対するインデックスがロケータ・リスト内に記憶される。ここでこの方法は終了する。
【0040】
区画エントリ内の使用されないバイトの使用法:
統合化されたヘッダ
図6に示すように、各マクロブロックに対して、1つのマクロブロック・ヘッダ・データがあり、それも、使用されている区画エントリが記憶される場所の割り当てられた部分の第1のセクション内に記憶される。いくつかの実施形態においては、マクロブロックに対するヘッダ・データは第1のセクションに記憶されるが、そのマクロブロックのどの区画エントリからも離れて記憶される。他の実施形態においては、マクロブロックに対するヘッダ・データはそのマクロブロックの特定の区画エントリ内に記憶される。これらの実施形態においては、ヘッダ・データは区画エントリの区画データと統合化されている。
【0041】
図5の例に示すように、区画エントリの長さは16バイトになる可能性がある。図5に示すように、区画データ(運動ベクトルおよび基準フレーム・インデックス・データ)は区画エントリの10バイトの505〜520を含み、その区画エントリの残りの6バイト525は使用されないままになっている。図9は、本発明による区画エントリ900の組成を示し、ここで区画エントリ900はそのエントリの6個の使用されないバイト525内に有用なデータを含んでいる。
【0042】
いくつかの実施形態においては、マクロブロックに対するヘッダ・データはそのマクロブロックの特定の区画エントリの使用されないバイト内に記憶される。いくつかの実施形態においては、そのマクロブロックのヘッダ・データはそのマクロブロックの第1の区画に対する第1の区画エントリ内にだけ統合化される。いくつかの実施形態においては、統合化されたヘッダ・データ930は区画エントリ900の使用されないバイト525のうちの2バイトを含む。
【0043】
統合化されたヘッダ・データ930は区画構成ルックアップ・テーブルと結合して使用され、そのマクロブロックの一意の区画構成を識別する。上記のように、H.264規格の下では、マクロブロックを259種類の可能な区画構成内に区画化することができる。これらの実施形態においては、その259種類の可能な区画構成のそれぞれと、各区画構成に関連付けられた一意の識別子(0〜258の範囲の)を含んでいるルックアップ・テーブルが生成される。H.264規格に対するルックアップ・テーブル1005の一例が図10に示されている。これらの実施形態においては、各マクロブロックに対して、統合化されたヘッダ・データはそのマクロブロックの区画構成を示すルックアップ・テーブル内の特定の区画構成を識別する(ここで、統合化されたヘッダ・データの値が特定の区画構成に関連付けられた一意の識別子に対してマッチされる)。
【0044】
マクロブロックに対する従来のヘッダは、そのマクロブロックがどのように区画化されているかについての記述データを含み、例えば、そのマクロブロックに対してマクロブロック内の各区画の位置および寸法のデータを含んでいることを思い出されたい。この従来の記述データはマクロブロックの一意の区画構成から導くことができる。何故なら、区画構成がそのマクロブロックに対してマクロブロック内の各区画の位置および寸法を示すことになるからである。従って、そのマクロブロックの一意の区画構成が一度決定されると、ヘッダ内に通常含まれているその記述データも決定することができる。
【0045】
統合化されたヘッダ・データを使用して記憶の消費が削減される。何故なら、統合化されたヘッダ・データは区画エントリの使用されていない部分に記憶され、従来のヘッダに対する別の記憶空間が不要となるからである。図11は、1つのフレームの1つのスライスに対する区画データを含んでいる記憶構造の概念図を示し、ここでヘッダ・データは区画エントリ内に統合化されている。図3および図6に対して比較して、各マクロブロックに対する別々のヘッダ・セクションは不要となっていることに留意されたい。
【0046】
図12は、統合化されたヘッダを使用してビデオ・フレームのスライスに対するデータを記憶するための方法1200のフローチャートである。方法1200は、例えば、データ記憶構造を使用してビデオ・データ・ストリームを符号化または復号化するために構成されるアプリケーションによって実行することができる。
【0047】
方法1200は、ビデオ・フレームのスライスに対するデータを受信する(1205において)ことから開始され、そのスライスは2つ以上のマクロブロックを含み、各マクロブロックは1つまたは複数の区画を含む。スライスに対するデータはそのスライスのマクロブロックの区画に関連付けられた区画データ(例えば、運動ベクトルおよび基準フレーム・インデックス・データ)と、そのマクロブロックがどのように区画化されているかを記述しているデータ(例えば、そのマクロブロック内の各区画の位置および寸法のデータ)を含む各マクロブロックに対するヘッダ・データとを含む。
【0048】
次に、方法1200は1つのマクロブロックの可能な各区画構成を含んでいる区画構成ルックアップ・テーブルを生成または受信し(1206において)、可能な各区画構成は一意の識別子(例えば、数値的識別子)に関連付けられている。スライスの各マクロブロックに対して、次に、方法1200はそのマクロブロックの区画構成にマッチする特定の区画構成をそのルックアップ・テーブル内で識別する(1207において)。次に、方法1200は、ルックアップ・テーブルからその識別された区画構成に関連付けられた一意の識別子を決定する(1208において)。その関連付けられた一意の識別子は、ここではマクロブロックに対する統合化されたヘッダ・データと呼ばれる。その方法はそのマクロブロックがどのように区画化されているかを記述しているデータを含んでいるマクロブロックに対する受信されたヘッダ・データを使用して、そのマクロブロックの特定の区画構成を識別する(1207において)ことができる。従って、1つのマクロブロックに対する統合化されたヘッダ・データはそのマクロブロックに対する元の受信されたヘッダ・データから導かれる(ステップ1207および1208において)。
【0049】
次に、方法1200はそのスライスのデータを記憶するために記憶構造の一部を割り当てる(1210において)。いくつかの実施形態においては、割り当てられる記憶部分のサイズはそのスライスのマクロブロックのヘッダ・データに対する別の記憶セクションを考慮せずに決定される。これらの実施形態においては、所定の数の区画エントリがそのスライスの各マクロブロックに対して割り当てられ、一方、各マクロブロックのヘッダ・データに対しては別の記憶セクションは割り当てられない(図11に図示)。
【0050】
次に、その方法は割り当てられた区画エントリ(使用される区画エントリと呼ばれる)内に、そのスライスの区画に関連付けられた区画データを記憶する(1212において)。次に方法1200は各マクロブロックに対する統合化されたヘッダ・データ(ステップ1208において決定された)を、そのマクロブロックの1つの区画に対して使用される区画エントリ内に記憶する(1215において)。その方法はそのマクロブロックの区画エントリの任意の使用されないバイト内に統合化されたヘッダ・データを記憶することによってそれを行うことができる。いくつかの実施形態においては、マクロブロックに対する統合化されたヘッダ・データはそのマクロブロックの第1の区画に対する第1の使用される区画エントリの中だけに記憶される。いくつかの実施形態においては、統合化されたヘッダ・データは使用される区画エントリのうちの2バイトの使用されないバイトを含む。
【0051】
いくつかの実施形態においては、次に方法1200は、使用される区画エントリを、割り当てられた記憶部分の第1のセクションに記憶/配置する(1217において)。いくつかの実施形態においては、方法1200はまた、割り当てられた記憶部分の第2のセクション内に使用されない区画エントリ(区画のデータを含んでいないエントリ)を記憶/配置する(1220において)。いくつかの実施形態においては、次に方法1200は割り当てられた記憶部分に関連付けられているロケータ・リストを生成し(1225において)、そのロケータ・リストは割り当てられた部分の区画エントリに対するロケーション情報を含んでいるインデックスのリストを含んでいる。ここでこの方法は終了する。
【0052】
カノニカルな基準フレーム・インデックス
いくつかの実施形態においては、カノニカルな基準フレーム・インデックスが計算され、各区画エントリの使用されないバイト内に記憶される。これらの実施形態においては、1つの区画エントリ内の第1および第2の基準フレーム・インデックスがそれぞれカノニカルな基準フレーム・インデックスに対してマップされる。
【0053】
図2に関連して上で説明されたように、運動ベクトルに関連付けられた基準フレーム・インデックスは、その運動ベクトルがベースとしているフレームを識別する基準フレーム・リスト内の1つのエントリ(フレーム番号を含む)を指定する。第1および第2の基準フレーム・リストは1つのフレームの各スライスごとに変化する可能性があるので、異なるマクロブロックの異なる区画エントリ内で値が同じである基準フレーム・インデックスが同じフレームを指すかどうかを確信を持って決定することができない。例えば、2つの異なるマクロブロック内の2つの区画エントリはその第1の運動ベクトルに関連付けられている「2」の基準フレーム・インデックスをそれぞれ有している可能性がある。しかし、これは両方の第1の運動ベクトルが同じフレームをベースにしていることを示さない。
【0054】
これにより、復号化のプロセスのデブロッキング・フィルタ段において効率が悪くなる。デブロッキング・フィルタ段においては、2つの時間的に隣接したマクロブロックの2つの区画に対して、その区画の第1および第2の運動ベクトルの値が同じである(または所定の変動範囲内にある)かどうか、および、その第1および第2の運動ベクトルが同じフレームをベースとしているかどうかが判定される。そうであった場合、これはその区画の運動が同じであり(あるいはほぼ同じであり)、それにより次に異なるフィルタリング・プロセス(例えば、より弱いフィルタリング・プロセス)が適用されることを示す。
【0055】
通常、2つの区画の第1および第2の運動ベクトルが同じフレームをベースとしているかどうかを判定するために非効率的なプロセスが使用されている。このプロセスは各区画に対して、その運動ベクトルに関連付けられている基準フレーム・インデックスの取り出しと、基準フレーム・リストの取り出しと、基準フレーム・インデックスによって指定された基準フレーム・リスト内のフレーム番号の決定とを必要とする。次にこのプロセスはそのフレームが同じであるかどうかを判定するためにフレームの番号の比較を必要とする。
【0056】
いくつかの実施形態においては、カノニカルな基準フレーム・リストが1つのフレームのすべてのスライスまたは一連のフレームのすべてのフレームに対して生成され、記憶され、使用される。いくつかの実施形態においては、そのカノニカルな基準フレーム・リストは復号化プロセスの間には変更されない。図13は、カノニカルな基準フレーム・リストの一例を示す。
【0057】
いくつかの実施形態においては、1つの区画エントリ内の基準フレーム・インデックスがカノニカルな基準フレーム・インデックスに対してマップされている。これらの実施形態においては、基準フレーム・インデックスはその基準フレーム・インデックスによって指示されたフレーム番号を決定するために関連付けられた基準フレーム・リストと結合して使用される。次に、マッチしているフレーム番号が、そのマッチしているフレーム番号を含んでいるカノニカルな基準フレーム内のエントリ番号(カノニカルな基準フレーム・インデックス)を決定するためにカノニカルな基準フレーム・リスト内に置かれる。次に、その決定されたカノニカルな基準フレーム・インデックスがその区画エントリの使用されないバイト内に記憶される。図9に示されている例においては、カノニカルな基準フレーム・インデックス935に対するデータは使用されないバイト525のうちの2つのバイトを含む。
【0058】
次は、図13に示されているカノニカルな基準フレーム・リストと図2の第1および第2の基準フレーム・リストを使用したマッピング・プロセスの一例である。第1の基準フレーム・インデックス「2」と第2の基準フレーム・インデックス「0」とが1つの区画エントリ内に含まれていると仮定する。基準フレーム・インデックス「2」に関連付けられている第1の基準フレーム・リストはフレーム番号2、1、および0をエントリ番号0、1、および2においてそれぞれ含んでいる。従って、基準フレーム・インデックス「2」はフレーム番号0を示す。カノニカルな基準フレーム・リストにおいては、フレーム番号0がエントリ0内のフレーム番号にマッチする。従って、基準フレーム・インデックス2がカノニカルな基準フレーム・インデックス0に対してマップされる。同様に、第2の基準フレーム・インデックス「0」に関連付けられている第2の基準フレーム・リストは、フレーム番号4、5、および6をエントリ番号0、1、および2においてそれぞれ含んでいる。従って、第2の基準フレーム・インデックス「0」はフレーム番号4を示す。カノニカルな基準フレーム・リストにおいては、フレーム番号4はエントリ3内のフレーム番号にマッチする。従って、第2の基準フレーム・インデックス0はカノニカルな基準フレーム・インデックス3に対してマップされる。
【0059】
いくつかの実施形態においては、1つのカノニカルな基準フレーム・リストが生成されて記憶される。他の実施形態においては、第1の運動ベクトルに対する特定のフレームを識別するために使用される第1のカノニカルな基準フレーム・リストと、第2の運動ベクトルに対する特定のフレームを識別するために使用される第2のカノニカルな基準フレーム・リストとが生成されて記憶される。
【0060】
これらの実施形態においては、カノニカルな基準フレーム・リストを生成すること、およびカノニカルな基準フレーム・インデックスに対して基準フレーム・インデックスをマップすることの追加のオーバヘッドがある。しかし、これらの動作が一度実行されると、2つの区画の運動ベクトルが同じフレームをベースとしているかどうかを判定するためのプロセスは時間が節約される。これらの実施形態においては、この判定を実行するために、区画のカノニカルな基準フレーム・インデックスだけを取り出して比較すればよい。また、フレーム番号の実際の値は必要ではないので、カノニカルな基準フレーム・インデックスによって示されるフレーム番号が決定される必要はない。これは、カノニカルな基準フレーム・インデックスが同じカノニカルな基準フレーム・リストを示していて、カノニカルな基準フレーム・インデックスの値は同じであり、従って、同じフレーム番号を指定しているということによる。
【0061】
図14は、カノニカルな基準フレーム・インデックスを使用して一連のフレーム内の1つのフレームの一組のスライスに対するデータを記憶するための方法1400のフローチャートである。方法1400は、例えば、データ記憶構造を使用してビデオ・データ・ストリームを符号化または復号化するために構成されているアプリケーションによって実行することができる。
【0062】
方法1400はビデオ・フレームの1つまたは複数のスライスの組に対するデータを受信する(1405において)ことから始まり、各スライスは2つ以上のマクロブロックを含み、各マクロブロックは1つまたは複数の区画を含む。そのスライスの組に対するデータは、各スライスに対するヘッダ・データ(1つまたは複数の元の基準フレーム・リストに対するデータを含む)と、そのマクロブロックの区画に関連付けられている区画データ(運動ベクトルおよび元の基準フレーム・インデックス・データ)と、各マクロブロックに対するヘッダ・データとを含む。いくつかの実施形態においては、1つの区画に対する運動ベクトルおよび元の基準フレーム・インデックス・データは、第1および第2の運動ベクトルと、関連付けられている第1および第2の元の基準フレーム・インデックスに対するデータを含む。第1の元の基準フレーム・インデックスは関連付けられている第2の元の基準フレーム・リスト(その区画が含まれているスライスのヘッダ・データから導くことができる)内で1つのエントリ(フレーム番号を含む)を指定し、それはその一連のフレームでその第1の運動ベクトルのベースとなっている特定のフレームを示す。同様に、第2の元の基準フレーム・インデックスは関連付けられている第2の元の基準フレーム・リスト(その区画が含まれているスライスのヘッダ・データから導くことができる)内で1つのエントリを指定し、それはその第2の運動ベクトルがベースとしている一連のフレーム内の特定のフレームを示す。
【0063】
次に、その方法はそのスライスの組のうちのすべてのスライスに対して使用されるカノニカルな基準フレーム・リストを生成または取り出す(1406において)。カノニカルな基準フレーム・リストはカノニカルな基準フレーム・インデックス(エントリ番号)のリストとフレーム番号のリストとを含み、各フレーム番号は特定のカノニカルな基準フレーム・インデックスに対応している。いくつかの実施形態においては、第1および第2の元の基準フレーム・インデックスをマップするために1つのカノニカルな基準フレーム・リストが生成される(以下に説明されるように)。他の実施形態においては、第1および第2のカノニカルな基準フレーム・リストが、第1および第2の元の基準フレーム・インデックスをそれぞれマップするために生成される。
【0064】
受信したスライスの組の中の1つのマクロブロックの各区画に対して、方法1400は元の基準フレーム・リストおよびカノニカルな基準フレーム・リストを使用して、第1および第2のカノニカルな基準フレーム・インデックスに対して、その区画に関連付けられている第1および第2の元の基準フレーム・インデックスをマップする(1407において)。その方法は、その区画に関連付けられている元の基準フレーム・リスト内の元の基準フレーム・インデックスによって示されているフレーム番号を決定し、カノニカルな基準フレーム・リスト内のフレーム番号をマッチし、そのマッチしているフレーム番号に対応しているカノニカルな基準フレーム・インデックスを決定することによって示されるフレーム番号を決定することにより、そのことを行うことができる。従って、第1および第2のカノニカルな基準フレーム・インデックスは、その区画に関連付けられている第1および第2の運動ベクトルがそれぞれベースとしているフレームを示す。
【0065】
区画の元の基準フレーム・インデックスをカノニカルな基準フレーム・インデックスに対してマップするために同じカノニカルな基準フレーム・リストが使用されることに留意されたい。これは元の基準フレーム・インデックスが異なる元の基準フレーム・リストをベースとしている場合であっても(例えば、元の基準フレーム・インデックスに関連付けられている区画が、受信したスライスの組の中の異なるスライス内にある時であっても)成立する。結果として、関連付けられているカノニカルな基準フレーム・インデックスが同じである組の中のどのスライス内のどの区画も、その区画が異なるスライス内に含まれている場合であっても、一連のフレーム内の同じフレームを参照し、指示する。上記のように、カノニカルな基準フレーム・インデックスのこの特性は区画のそれ以降の処理において利点を提供することができる。
【0066】
スライスの組のうちの各スライスに対して、方法1400は次にそのスライスのデータを記憶するための記憶構造の特定の部分を割り当てる(1410において)。これらの実施形態においては、各スライスの各マクロブロックに対して所定の数の区画エントリが割り当てられる。次にその方法はそのスライスの区画に関連付けられている区画データをその割り当てられた区画エントリ(使用される区画エントリと呼ばれる)内に記憶する(1412において)。
【0067】
受信したスライスの組の中の各区画に対して、方法1400は次にその区画に関連付けられている第1および第2のカノニカルな基準フレーム・インデックスをその区画に対して使用される区画エントリ内に記憶する(1415において)。その方法は、第1および第2のカノニカルな基準フレーム・インデックスに対するデータをその区画に対する区画エントリの使用されないバイトのどれか内に記憶することによって行うことができる。いくつかの実施形態においては、第1および第2のカノニカルな基準フレーム・インデックスに対するデータは、使用される区画エントリの使用されないバイトのうちの2バイトを含む。
【0068】
いくつかの実施形態においては、各スライス(複数の区画を含む)に対して、その方法1400はまた使用される区画エントリ(そのスライス内の区画に対するデータを含む)をそのスライスに対して割り当てられた記憶部分の第1のセクション内に記憶/配置する(1417において)。いくつかの実施形態においては、各スライスに対して、方法1400はまた、使用されない区画エントリ(1つの区画のデータを含んでいないエントリ)をそのスライスに対して割り当てられた記憶部分の第2のセクション内に記憶/配置する(1420において)。いくつかの実施形態においては、各スライスに対して、方法1400はそのスライスに対して割り当てられている記憶部分に関連付けられているロケータ・リストを生成し(1425において)、ロケータ・リストは割り当てられた部分の区画エントリに対するロケーション情報を含んでいるインデックスのリストを含んでいる。ここでこの方法は終了する。
【0069】
区画エントリ内の使用されないバイトの他の使用法
上記のように、1つの区画エントリは6個の使用されないバイトを含んでいる。いくつかの実施形態においては、統合化されたヘッダ・データ930が1つのマクロブロックの第1区画の使用されないバイト内に記憶される。いくつかの実施形態においては、カノニカルな基準フレーム・インデックス935が計算され、各区画エントリの使用されないバイト内に記憶される。
【0070】
他の実施形態においては、区画エントリ内の使用されないバイトはその区画の符号化または復号化をより効率的にすることができる任意の目的のために使用される。いくつかの実施形態においては、区画エントリの使用されないバイトはその区画の符号化または復号化を容易にする、識別された、あるいは計算されたデータを記憶するために使用される。例えば、マクロブロックのいくつかの区画を計算し、そのマクロブロックの第1の区画の使用されないバイト内に記憶することができる。これにより、復号化時に区画の番号を後で計算する必要がなくなる。図9に示されている例においては、いくつかの区画940に対するデータは使用されないバイトのうちの1バイトを含む。
【0071】
図9に示されている例においては、使用されるバイト525内のデータ(統合化されたヘッダ・データ930およびカノニカルな基準フレーム・インデックス935に対するデータなど)が区画エントリ900内で特定の順序で示されている。しかし、この分野の技術に熟達した人であれば、他の順序のデータも可能であること理解することができるだろう。
【0072】
区画の一体化:
いくつかの実施形態においては、同じマクロブロックのいくつかの、あるいはすべての区画が同じ運動ベクトルおよび同じ基準フレーム・インデックスを備えている時(同一区画と呼ばれる)、その同一区画は復号化の目的のために1つの区画にまとめられる(一体化される)。この状況においては、そのマクロブロックに対して複数の区画エントリではなく、1つの区画エントリだけを保存すれば済み、従って、記憶装置のオーバヘッドが減少する。
【0073】
図15Aは同じマクロブロックの4つの区画すべてが同じ運動ベクトルおよび基準フレーム・インデックスを有している時の一例を示し、その4つの区画は復号化の目的のために1つの区画に一体化される。従って、このマクロブロックに対しては4つの区画エントリでなく、1つの区画エントリだけを保存するだけで済む。図15Bは同じマクロブロックの5個の区画のうちの2つが同じ運動ベクトルおよび基準フレーム・インデックスを有している時の例を示し、その2つの同じ区画がマクロブロックの左上側に置かれている。図15Bに示すように、その2つの同一区画は1つの区画に一体化され、5個の区画エントリではなく4個の区画エントリだけをそのマクロブロックに対して保存すればよいようになる。
【0074】
いくつかの実施形態においては、その一体化の方法は本発明の区画エントリのパッキング法(図6に関連して上述した)と結合して使用される。これらの実施形態においては、マクロブロックの使用される区画エントリが記憶構造の割り当てられた部分の第1セクション内にパックされる前に、そのマクロブロックの区画がチエックされてそのマクロブロック内に同一区画があるかどうかが判定される。同一区画があった場合、そのマクロブロックの同一区画は1つの区画内にまとめられ、そしてその同一区画に対する1つの区画が、割り当てられた部分の第1セクションに対して記憶される。
【0075】
同じマクロブロックの区画が同じ第1および第2の運動ベクトルと、同じ第1および第2の基準フレーム・インデックスとを有している時、その同一区画を1つの区画として扱うことがより効率的である。運動ベクトルと基準フレーム・インデックスとの比較を実行するための最初の時間的オーバヘッドはあるが、同一区画が1つの区画として一体化されると、すべての復号化段をより高速に実行することができ、いくつかのより小さい区画におけるいくつかの操作を行うのではなく、1つのより大きい一体化された区画について1つの操作を実行すればよいことになる。これは時間的により効率的である。何故なら、その一体化された区画について実行されるすべての復号化機能に対して、1回のローディング操作だけ、および復号化機能に対する1回の呼出しだけで済み、複数のローディング操作および復号化機能に対する複数の呼出しは不要であるからである。
【0076】
同じマクロブロックの区画は同じ基準フレーム・リストを使用することに留意されたい。何故なら、同じ基準フレーム・リストが同じスライスのすべてのマクロブロックに対して使用されるからである。従って、基準フレーム・インデックスによって指定される実際のフレーム番号を求めて比較する必要はない。何故なら、その基準フレーム・インデックスが同じ基準フレーム・リストと結合して使用されるからである。
【0077】
図16は、ビデオ・スライスのマクロブロックの区画を一体化するための方法1600のフローチャートである。いくつかの実施形態においては、方法1600は図8に関連して説明されている方法800のステップ807を含む。図8の方法800においては、方法800はビデオ・フレームの1つのスライスに対するデータを受信し(805において)、そのスライスは2つ以上のマクロブロックを含み、各マクロブロックは1つまたは複数の区画を含む。そのスライスに対するデータはそのスライスのマクロブロックの区画に関連付けられた区画データ(例えば、運動ベクトルおよび基準フレーム・インデックス・データ)と、各マクロブロックに対するヘッダ・データとを含む。
【0078】
方法1600は受信したスライス内の最初のマクロブロックを現在マクロブロックとして設定することから開始する。次に方法1600は区画に関連付けられている区画データ(1605において)(運動ベクトルおよび基準フレーム・インデックス・データ)を比較することによって現在マクロブロックのすべての区画を比較する(1610において)。次にその方法は現在マクロブロックの区画のどれかが同一であるかどうか(すなわち、区画のどれかに関連付けられている運動ベクトルおよび基準フレーム・インデックスが同じであるかどうか)を判定する(1615において)。その場合、その方法は現在マクロブロックの同一区画を1つの区画に一体化し(1620において)、ステップ1625へ進む。そうでなかった場合、その方法は直接にステップ1625へ進む。
【0079】
ステップ1625において、その方法は現在マクロブロックがそのスライス内の最後のマクロブロックであるかどうかを判定する。そうでなかった場合、その方法は次のマクロブロックを現在マクロブロックとして設定し(1630において)、そしてステップ1610へ継続する。そうであった場合、この方法は終了する。
【0080】
図17は、本発明のいくつかの実施形態が実施されているコンピュータ・システム1700を示す。コンピュータ・システム1700はバス1705と、プロセッサ1710と、システム・メモリ1715と、読出し専用メモリ1720と、永久記憶装置1725と、入力装置1730と、出力装置1735とを含む。
【0081】
バス1705は、すべてのシステム、周辺装置、およびコンピュータ・システム1700の多数の内部装置と通信できるように接続するチップセットのバスを集合的に表す。例えば、バス1705は、プロセッサ1710を読出し専用メモリ1720、システム・メモリ1715、および永久記憶装置1725と通信できるように接続している。
【0082】
読出し専用メモリ(ROM)1720は、プロセッサ1710およびコンピュータ・システムの他のモジュールによって必要とされる静的データおよび命令を記憶する。他方、永久記憶装置1725は読出し/書込みメモリ装置である。この装置はコンピュータ・システム1700がオフになった時でも命令およびデータを記憶する不揮発性メモリである。本発明のいくつかの実施形態は大容量記憶装置(磁気ディスクまたは光ディスクなど、およびその対応しているディスク・ドライブ)を永久記憶装置1725として使用する。他の実施形態は取り外し可能記憶装置(フロッピー(登録商標)・ディスクまたはzip(登録商標)ディスクなど、およびその対応しているディスク・ドライブ)を永久記憶装置として使用する。
【0083】
永久記憶装置1725と同様に、システム・メモリ1715は読出し/書込みメモリ装置である。しかし、記憶装置1725と違って、システム・メモリはランダム・アクセス・メモリ(RAM)などの揮発性読出し/書込みメモリである。システム・メモリはプロセッサが実行時に必要とする命令およびデータのいくつかを記憶する。
【0084】
いくつかの実施形態においては、本発明の方法を実行するために必要な命令および/またはデータがシステム・メモリ1715、永久記憶装置1725、読出し専用メモリ1720、またはこの3つの任意の組合せ内に記憶される。例えば、各種の記憶装置は本発明の方法に従ってビデオ・データを符号化または復号化するための命令を含み、および/またはビデオ・データを含むことができる。これらの各種の記憶装置から、プロセッサ1710は本発明のプロセスを実行するために実行する命令および処理するデータを取り出す。
【0085】
また、バス1705は入力装置1730および出力装置1735に対しても接続する。入力装置1730によって、ユーザは情報を通信し、コンピュータ・システム1700に対するコマンドを選択することができる。入力装置1730は英数字キーボードとカーソル・コントローラとを含む。出力装置1735はコンピュータ・システム1700によって発生された画像を表示する。出力装置はプリンタおよび、陰極線管(CRT)または液晶表示装置(LCD)などの表示装置を含む。
【0086】
最後に、図17に示すように、バス1705はコンピュータ・システム1700を、例えば、ネットワーク・アダプタ(図示せず)を通じてネットワーク1765に対して結合する。この方法で、コンピュータ・システム1700はコンピュータのネットワーク(ローカル・エリア・ネットワーク(「LAN」)、広域ネットワーク(「WAN」)、またはイントラネットなど)の一部であるか、あるいはネットワークのネットワーク(インターネットなど)であることができる。コンピュータ・システム1700の構成要素のうちの任意のもの、またはすべてを本発明と結合して使用することができる。しかし、当業者なら、他のシステム構成も本発明と結合して使用できることを理解されたい。
【0087】
本発明は多数の特定の詳細事項を参照して説明されてきたが、当業者なら、本発明は本発明の精神から逸脱することなしに他の特定の形式で実施できることを理解することができるだろう。例えば、本発明の多くの実施形態がマクロブロックを参照しながら上述された。当業者なら、これらの実施形態を任意の他の画素値のアレイと結合して使用することができることを理解することができるだろう。
【符号の説明】
【0088】
505 第1の運動ベクトル 510 第2の運動ベクトル
515 第1の基準フレーム・インデックス
520 第2の基準フレーム・インデックス
525 バイト 605 記憶構造
610 記憶部分 630 第1のセクション
635 第2のセクション 705 ロケータ・リスト
800 方法 900 区画エントリ
930 ヘッダ・データ 1005 ルックアップ・テーブル
1200 方法 1400 方法
1700 コンピュータ・システム 1705 バス
1710 プロセッサ 1715 システム・メモリ
1720 読出し専用メモリ 1725 永久記憶装置
1730 入力装置 1735 出力装置

【特許請求の範囲】
【請求項1】
ビデオ・フレーム・スライスのデータをそのスライスに対して割り当てられた記憶装置内に記憶するための方法であって、前記スライスは2つ以上のマクロブロックを含み、各マクロブロックは1つまたは複数の区画を含み、前記割り当てられた記憶装置内に前記マクロブロックに対して割り当てられた複数の区画エントリを有し、前記スライスの前記データは前記マクロブロックの区画に対する区画データを含み、前記方法が、
前記マクロブロックの使用される区画エントリを前記割り当てられた記憶装置の第1のセクション内に記憶するステップを含み、使用される区画エントリがマクロブロックの区画に対するデータを含み、さらに、
前記マクロブロックの使用されない区画エントリを前記割り当てられた記憶装置の第2のセクションに記憶するステップを含み、使用されない区画エントリがマクロブロックの区画に対するデータを含まない方法。
【請求項2】
前記第1および第2のセクションがそれぞれ前記割り当てられた記憶装置内の記憶の連続した領域を含み、それにより、使用される区画エントリが前記割り当てられた記憶装置内で使用されない区画エントリと一緒に分散化されないようにしている請求項1に記載の方法。
【請求項3】
前記割り当てられた記憶装置に関連付けられたインデックスのリストを生成するステップをさらに含み、前記インデックスのリスト内のインデックスは前記スライス内のマクロブロックおよび、前記割り当てられた記憶装置内の前記マクロブロックの第1の区画エントリだけに対するロケーション情報を識別する請求項1に記載の方法。
【請求項4】
前記スライスの前記データが各マクロブロックに対する元のヘッダ・データをさらに含み、
前記マクロブロックに対する前記元のヘッダ・データを使用してマクロブロックに対する統合化されたヘッダ・データを導くステップと、
前記マクロブロックに対して導かれた前記統合化されたヘッダ・データを、前記マクロブロックの使用される区画エントリ内に記憶するステップとをさらに含む請求項1に記載の方法。
【請求項5】
前記統合化されたヘッダ・データを導くステップが、
前記マクロブロックの区画構成にマッチする区画構成を識別するステップと、
前記マクロブロックに対して識別された前記区画構成に関連付けられた一意の識別子を決定するステップとを含み、前記一意の識別子が前記マクロブロックに対する前記統合化されたヘッダ・データを含む請求項4に記載の方法。
【請求項6】
前記識別および決定のステップが、前記マクロブロックの可能なパターン構成を含むパターン構成ルックアップ・テーブルを使用して実行され、可能な各パターン構成が一意の識別子に関連付けられている請求項5に記載の方法。
【請求項7】
前記スライスが一連のフレーム内のフレーム内に含まれ、前記スライスの前記データが第1の元のフレーム基準リストに対するデータをさらに含み、区画は関連付けられた運動ベクトルおよび、前記第1の元のフレーム基準リスト内のフレーム番号を示す元の基準フレーム・インデックスを有し、前記フレーム番号は前記運動ベクトルがベースとしている前記一連のフレーム内の特定のフレームを示し、
前記スライス内の1つまたは複数の区画に対して、前記第1の元のフレーム基準リストとカノニカルなフレーム基準リストとを使用して、関連付けられた元の基準フレーム・インデックスをカノニカルな基準フレーム・インデックスに対してマップするステップと、
前記カノニカルな基準フレーム・インデックスに対するデータを前記区画に対する前記使用される区画エントリ内に記憶するステップとをさらに含む請求項1に記載の方法。
【請求項8】
前記カノニカルな基準フレーム・インデックスが、前記カノニカルなフレーム基準リスト内のフレーム番号を示し、前記フレーム番号は前記区画に関連付けられている運動ベクトルがベースとしている一連のフレーム内の特定のフレームを示す請求項7に記載の方法。
【請求項9】
追加のビデオ・フレーム・スライスに対するデータを受信するステップをさらに含み、前記追加のスライスが前記一連のフレーム内のフレーム内に含まれ、前記追加のスライスの前記データが前記第1の元のフレーム基準リストとは異なっている第2の元のフレーム基準リストに対するデータを含み、前記追加のスライス内の区画が前記第2の元のフレーム基準リスト内のフレーム番号を示す関連付けられた運動ベクトルおよび元の基準フレーム・インデックスを有し、前記フレーム番号が前記運動ベクトルがベースとしている前記一連のフレーム内の特定のフレームを示し、
前記追加のスライス内の1つまたは複数の区画に対して、前記第2の元の基準フレーム・リストとカノニカルなフレーム基準リストとを使用して、関連付けられた元の基準フレーム・インデックスを前記カノニカルな基準フレーム・インデックスに対してマップするステップをさらに含む請求項7に記載の方法。
【請求項10】
値が同じであるスライスのいずれかにおける任意の区画に対してマップされている任意のカノニカルな基準フレーム・インデックスが、前記一連のフレーム内の同じ特定のフレームを示す請求項9に記載の方法。
【請求項11】
使用される区画エントリが運動ベクトルおよび基準フレーム・インデックス・データおよび使用されないバイトを含み、
前記スライスの符号化または復号化において有用である他のデータを決定するステップと、
前記決定されたデータを、使用される区画エントリの前記使用されないバイト内に記憶するステップとをさらに含む請求項1に記載の方法。
【請求項12】
特定のマクロブロックの2つ以上の区画が同一であるかどうかを判定するステップと、
前記判定に基づいて前記2つ以上の区画を前記特定のマクロブロックの1つの区画内に一体化するステップとをさらに含む請求項1に記載の方法。
【請求項13】
区画に対する区画データが運動ベクトルと基準フレーム・インデックス・データを含み、
2つ以上の区画が同一であるかどうかを判定するステップが、前記2つ以上の区画の前記運動ベクトルおよび基準フレーム・インデックス・データが同一であるかどうかを判定するステップを含む請求項12に記載の方法。
【請求項14】
命令が記憶されているコンピュータ可読媒体を含むコンピュータ・プログラム製品であって、実行時にビデオ・フレーム・スライスのデータを前記スライスに対して割り当てられた記憶装置内に記憶し、前記スライスが2つ以上のマクロブロックを含み、各マクロブロックが1つまたは複数の区画を含み、前記マクロブロックに対して割り当てられている複数の区画エントリを前記割り当てられた記憶装置内に有し、前記スライスの前記データが前記マクロブロックの区画に対する区画データを含み、前記コンピュータ・プログラム製品が、
前記マクロブロックの使用される区画エントリを前記割り当てられた記憶装置の第1のセクション内に記憶するステップであって、使用される区画エントリはマクロブロックの区画に対するデータを含むステップのための命令の組と、
前記マクロブロックの使用されない区画エントリを前記割り当てられた記憶装置の第2のセクション内に記憶するステップであって、使用されない区画エントリはマクロブロックの区画に対するデータを含んでいないステップのための命令の組とを含むコンピュータ・プログラム製品。
【請求項15】
前記第1および第2のセクションがそれぞれ前記割り当てられた記憶装置内の記憶の連続した領域を含み、それにより、使用される区画エントリが前記割り当てられた記憶装置内で使用されない区画エントリと一緒に分散化されない請求項14に記載のコンピュータ・プログラム製品。
【請求項16】
前記スライスの前記データが各マクロブロックに対する元のヘッダ・データをさらに含み、前記コンピュータ・プログラム製品が、
前記マクロブロックに対する前記元のヘッダ・データを使用してマクロブロックに対する統合化されたヘッダ・データを導き出すステップのための命令の組と、
前記マクロブロックに対して導き出された前記統合化されたヘッダ・データを、使用される区画エントリ内に記憶するステップのための命令の組とをさらに含む請求項14に記載のコンピュータ・プログラム製品。
【請求項17】
前記スライスが一連のフレーム内のフレーム内に含まれ、前記スライスの前記データが第1の元のフレーム基準リストに対するデータをさらに含み、区画は関連付けられている運動ベクトルとフレーム番号を示す元の基準フレーム・インデックスを前記第1の元のフレーム基準リスト内に有し、前記フレーム番号が、前記運動ベクトルがベースとしている前記一連のフレーム内の特定のフレームを示し、前記コンピュータ・プログラム製品が、
前記スライス内の1つまたは複数の区画に対して、前記第1の元のフレーム基準リストおよびカノニカルなフレーム基準リストを使用して、関連付けられた元の基準フレーム・インデックスをカノニカルな基準フレーム・インデックスに対してマップするステップのための命令の組と、
前記カノニカルな基準フレーム・インデックスに対するデータを前記区画に対する前記使用される区画エントリ内に記憶するステップのための命令の組とをさらに含む請求項14に記載のコンピュータ・プログラム製品。
【請求項18】
追加のビデオ・フレーム・スライスに対するデータを受信するための命令の組をさらに含み、前記追加のスライスが前記一連のフレーム内のフレーム内に含まれ、前記追加のスライスの前記データが前記第1の元のフレーム基準リストとは異なっている第2の元のフレーム基準リストに対するデータを含み、前記追加のスライス内の区画が関連付けられた運動ベクトルと前記第2の元のフレーム基準リスト内のフレーム番号を示す元の基準フレーム・インデックスとを有し、前記フレーム番号が、前記運動ベクトルがベースとしている前記一連のフレーム内の特定のフレームを示し、
前記追加のスライス内の1つまたは複数の区画に対して、前記第2の元のフレーム基準リストおよびカノニカルなフレーム基準リストを使用して、関連付けられた元の基準フレーム・インデックスを前記カノニカルな基準フレーム・インデックスに対してマップするための命令の組をさらに含み、値が同じであるいずれかのスライス内の任意の区画に対してマップされた任意のカノニカルな基準フレーム・インデックスが前記一連のフレーム内の同じ特定のフレームを示す請求項17に記載のコンピュータ・プログラム製品。
【請求項19】
使用される区画エントリが運動ベクトルおよび基準フレーム・インデックス・データを含む使用されるバイトと、使用されないバイトとを含み、前記コンピュータ・プログラム製品が、
前記スライスの前記符号化または復号化において有用な他のデータを決定するステップのための命令の組と、
前記決定されたデータを、使用される区画エントリの前記使用されないバイト内に記憶するステップのための命令の組とをさらに含む請求項14に記載のコンピュータ・プログラム製品。
【請求項20】
特定のマクロブロックの2つ以上の区画が同一であるかどうかを判定するステップのための命令の組と、
前記判定に基づいて前記2つ以上の区画を前記特定のマクロブロックの1つの区画内に一体化するステップのための命令の組とをさらに含む請求項14に記載のコンピュータ・プログラム製品。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
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

【図15A】
image rotate

【図15B】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2012−170118(P2012−170118A)
【公開日】平成24年9月6日(2012.9.6)
【国際特許分類】
【出願番号】特願2012−90430(P2012−90430)
【出願日】平成24年4月11日(2012.4.11)
【分割の表示】特願2005−185739(P2005−185739)の分割
【原出願日】平成17年6月24日(2005.6.24)
【出願人】(503260918)アップル インコーポレイテッド (568)
【Fターム(参考)】