説明

データデコーディング

【課題】コンテクストベースの適応演算エントロピーコード化データをデコーディングする方法を提供する。
【解決手段】例えば、H264デコーダから到来するデコードされたデータ(1)は、コンテクストベースの演算エンコーディングを含む並列エンコーディング機構を使用して、そのデコードされたデータをエントロピーエンコードするエンコーダユニット(2)へ供給される。シンタックスは、コンテクストがその直前にエンコードされた記号に依存しないように選択される。エンコーダ(2)の出力は、FIFOメモリへ供給され、その出力は、相補的デコーダ(4)へ供給され、そしてその出力は、到来するデコードされたデータ(1)の遅延されたコピーを発生する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、エントロピーエンコードされたデータストリームの処理に係り、より詳細には、このようなデータストリームをデコードするための方法及び装置に係る。
【背景技術】
【0002】
エントロピーエンコードされたデータストリームは、例えば、新規な“H264”ビデオエンコーディング規格(“ITU-T Recommendation H.264: Advanced video coding for generic audiovisual services”)のものを含む圧縮されたビデオデータストリームである。ウイジェンド氏等は、“An Overview of the H.264/AVC Video Coding Standard”(IEEE Trans. On Circuits and Systems for Video Technology July 2003)においてこの仕様書の若干短い概要を提供している。
【0003】
ほとんどのビデオ圧縮機構は、「生」のデータ記号を、それらの発生確率を反映する表現に置き換えて、頻繁に発生する記号をより少ないビットの表現でエンコードする一方、あまり頻繁でない記号をより長い表現でエンコードするようなある形式のエントロピーエンコーディングを含む。シャノンの理論は、確率pをもつ記号に対する最適なビット数が−log(p)/log(2)であると述べている。例えば、3回のうち1回の発生機会をもつ記号は、1.585ビットで最適に表わされる。
【0004】
多くのエンコーディング機構は、エントロピーエンコーディングを行うために、ハフマンのシステムと同様の可変長さコーディング(VLC)システムを使用している。このような機構は、一般に、エンコード及びデコードが非常に容易であるが、各コードの長さが常に整数のビット数であるために、一般に、シャノンにより述べられた最適状態を達成することができない。
【0005】
VLC機構に代わるより最近の機構は、演算エンコーディング(その紹介が、プレス氏等の“Numerical Recipes in C”、ISBN 0−521−43108−5に見ることができる)、及び実質的に等価なレンジエンコーディングを含む。これら両エンコーディング機構は、実際に、記号を分数のビット数で表わすのを許すことにより、シャノンの最適状態に非常に近いものを得る、より進歩したエントロピーエンコーディング機構である。しかしながら、1つの欠点は、VLC解決策よりもエンコード及びデコードが非常に複雑なことである。
【0006】
新規なH.264規格、特にそのCABACモード(マープ氏等の“Context-based adaptive binary arithmetic coding in the H.264/AVC video compression standard”,IEEE Transactions on Circuits and Systems for Video Technology, July 2003を参照)は、演算エンコーディングの一形式を使用している。H264 CABAC機構は、次のことによりプロセスをより難解なものにする。
a)演算エンコーダ/デコーダを使用して、値のセットではなく、2つの記号、即ち0か1だけをエンコードする。しかしながら、3つ以上の記号の選択からデコードできる演算デコーダは、構成費用も高いことに注意されたい。典型的に、N個の記号を直接取り扱うエンコーダ又はデコーダは、コストがO(N)となり、一方、2記号デコーダを使用して(複数のステップにわたり)N個の記号を処理するものは、コストがO(log(N))となる。
b)エンコード/デコードされた各ビットの後にエンコーディング/デコーディングを遂行するのに使用される統計学的情報(H264ではコンテクストとして知られている)を更新する。
c)ビットごとに選択できる多数のコンテクストを維持する。
d)多数のステップを含むことのできる「デバイナライゼーション(debinarisation)」プロセスを使用することにより、デコードされた演算ビットを記号へアッセンブルする。
【0007】
逆離散的コサイン変換(IDCT)パラメータの場合には、これは、意義マップをデコードし、非ゼロ記号に対してサインビットをデコードし、非ゼロ記号に対して単項ストリングデータをデコードし、そして大きな非ゼロ記号に対して指数関数的なゴロン(Golomb)データをデコードすることを含む。これらの各デコーディングステップは、演算デコーダを制御するためにフィードバックされる異なるコンテクストを選択する。
【0008】
これらのステップをたどることにより、非常に高い圧縮比を得ることができる。しかしながら、コストペナルティがある。クロック(例えば、100〜200Mhzの範囲のクロックレートの)当たり1ビットを越えるものをデコードするのはハードウェアにとって不可能ではないまでも非常に困難である。並列な演算エンコーディングにおいてある程度の進歩がなされているが(コンテクストが一定に保たれると仮定すれば)、デコーディングに対してなされたと思われるものはない(スポール及びメリチャーの“Arithmetic Encoding in Parallel”を参照)。各フレームが多数の「スライス」(即ち、フレームの部分)で構成される場合には、各スライスを並列にデコードすることができるが、到来するビデオストリームがフレーム当り2つ以上のスライスを有することが保証されないので、これは、適当な解決策ではない。
【0009】
更に、前記d)で述べたように、ビデオストリームにおけるソース記号は、一般的に、多数のビットで構成され(例えば、ソース値は、16ビット値でサインされ)、従って、CABACも、単項及びゴロンコーディングのようなVLCエンコーディング機構を使用する。ビデオデータをエンコーディングするときには、システムは、最初に、各々の生の記号値をVLCバイナリーエンコード化形態(H264では「バイナライゼーション(binarisation)」として知られた)へ変換し、これを、次いで、バイナリー演算エンコーダにより圧縮しなければならない。デコーダは、本質的に、これらのステップを逆に実行して、オリジナルのデータストリームを得る。これは、最悪のケースにおいて、演算デコーダがクロック当たり1ビットをデコードできるとしても、最終的な記号を得るのに多数のクロックサイクルを必要とする。例えば、IDCTデータを処理するときに、クロック当たり1ビットの演算デコードレートを仮定すれば、CABACプロセスを使用して「64」の記号値をデコードするのに30サイクル程度を要し、一方、簡単な「+1」値は、CABACでデコードするのに4つのクロックを要する。大きな値に関連したデコードコストは、それらの非常に低い確率により、そして非常に速いレートでデコードされるゼロ値の非常に高い確率により、相殺される。バイナライゼーションプロセスを使用してIDCT係数(意義マップを含む)の値をエンコードするのに必要なビットの数の幾つかの例を、以下のテーブルに示す。
【0010】

【0011】
デコードタイミングは、d)に述べたように、演算デコーダを制御するのに使用されるコンテクストデータが、以前にデコードされたビットの値に基づいて、しばしば、ビットごとに選択されることにより、更に複雑化される。これは、クロックごとに1ビットをデコードする必要がある場合に、ビットの演算デコーディング及びそのビットの値に基づくデバイナライゼーション判断ステップを同じクロック周期で行わねばならないか、或いはある種類の推論的並列デコーダを構成しなければならないことを意味する。その第1は、今日の技術では達成できないことがあり、そしてその第2は、実施コストがかかる。それ故、100〜200MHzで実行されるH264演算デコーダハードウェア解決策は、クロック当たり1ビットを達成しないことがあり、タイミングの問題を更に悪化させる。
【0012】
圧縮されたビデオストリームは、充分な指定平均データレート、例えば、高鮮明度ビデオ(即ち、1920x1080ピクセル@30fps)に対して50Mビット/sを有するが、このビデオストリームにおける瞬時データレートは、フレームごとに著しく変化する。イントラ・エンコード化として知られている幾つかのフレーム(即ちI−フレーム)は、一般に、大きなデータを有するが、予想フレーム(P−フレーム)及び両方向フレーム(B−フレーム)は、以前にデコードされたフレームからデータを借りるので、遥かに少ないビットしか必要としない。例えば、40Mビット/sでエンコードされる所与のサンプルビデオストリームでは、各I−フレームが、典型的に、ほぼ3Mビットを必要とし、P及びB−フレームは、各々、そのサイズのほぼ1/2及び1/3である。50Mb/sの最大レートを使用するビデオストリームをデコードできるハードウェアCABACデコーダ(例えば、100〜200MHzで動作する)を形成することは困難ではないが、従来のデコーダは、そのデータを定常のフレームごとのレートで発生しない。
【0013】
各ビデオフレームの処理コストが、エントロピーエンコードされたデータに単純に依存する場合には、解決すべき問題はない。しかしながら、処理レートが更に固定された処理部分がある。例えば、IDCT計算、モーション補償、及びデリンギング/デブロッキングユニットは、一般に、処理されるピクセルの数に依存する時間を必要とする。これらのユニットは、処理時間がより一定であるので、実際には、著しく変化し得るソースプロジューサ、即ちエントロピーデコーダにより供給される比較的固定レートのコンシューマプロセス、即ちバックエンドビデオプロセッサが存在する状況となる。
【0014】
例えば、ハードウェア解決策は、〜400クロックサイクルにおいて384個のピクセルより成るH264マクロブロックに対してIDCT処理を遂行する。エントロピーデコーダにより供給されるこのデータのパラメータは、マクロブロック領域における映像の複雑さに基づいて0から384個までのいずれかの数の記号を有し、従って、エントロピーデコードされるべきクロックサイクルがゼロから数千個までのいずれかとなる。
【0015】
これは、処理レートの不一致のために、非常に頻繁に、あるユニットが他のユニットによりストールされるときの状況を招く。その結果、フレーム/秒での全処理レートが2の瞬時最小値に低下し、これは、システムが必要なデコーディングフレームレートを満足しないことを意味する。前記のIDCTの例を再び見ると、エントロピーエンコーダがクロック当たり1記号のレートで各記号をデコードできる場合には、問題が生じない。
【0016】
上述したように、エントロピーデコーダをより速く動作することは(不可能でないまでも)実際的ではなく、コンシューマユニットをより速く動作することは、非常に経費高となる。これらの状況における明らかな昔ながらの慣習は、プロデューサとコンシューマとの間にレート平滑FIFOを導入することである。この一般的なやり方は、3Dグラフィック処理チップからハードディスクコントローラまでの装置に広く使用されている。
【0017】
簡単なFIFOは、問題を「解決」するが、データレートを有効に平滑化するのに多数のフレームの価値あるデータを含む必要があるという不便さがある。これは、典型的に、バッファが外部メモリであるように強制し、これは、大量のRAMとタイアップするだけでなく、バッファの書き込み及び読み取りに著しい帯域巾を消費することも意味する。初期のビデオ規格は、ハフマン/VLCエンコーディングを使用し、これは、クロック当たり1記号のレートで容易にエンコード及びデコードすることができ、従って、非常に明らかな選択肢は、このようなエンコーディング機構を使用して、FIFOへの入力のデータを再圧縮し、次いで、その圧縮されたデータを再び出口で解凍することである。実際に、多数の規格を取り扱うビデオエンコーディング/デコーディングチップでは、このようなVLCハードウェアがとにかく存在する。この幾分か簡単な解決策は、リンザー及びレウン氏によって説明されていると思われる(米国特許第6,927,710号)。
【0018】
それに関連する機構がシューマン氏により説明されている(米国特許出願第20040260739号)。この方法では、データを直ちに「デバイナライズ」するのではなく、CABAC演算デコーダから出力される「バイナライズ」されたビットがFIFOに送り込まれ、次いで、FIFOの他端には、(第2の)デバイナライゼーションユニットが配置されている。(正しいコンテクストを選択するためには演算デコーダユニットの付近に部分的デバイナライゼーションユニットが依然必要とされることに注意されたい。)バイナライズされたデータ(即ち、例えば、依然として、意義マップ+単項+ゴロン形態でエンコードされたデータ)は、依然、合理的に充分に圧縮されたフォーマットである。不都合なことに、この方法に伴って生じ易い問題は、単一のクロックサイクルで各記号を解凍できるようにするために非常に大きなビットウインドウ及び複雑なハードウェアが必要になることである。これは、上述したIDCTバイナライゼーションコストテーブルから明らかである。
【0019】
最後に関心のあるものは、H264ビデオストリームにおいてCABACユニットからデコードされる典型的な値の検討である。特に関心のあるのは、IDCT係数である。というのは、これらは、通常、膨大な量のデコードされたデータを作り上げるからである。次のテーブルは、典型的なH264高鮮明度ビデオストリームからサンプリングされたIDCTの値及び確率を示す。確率と共に最適な記憶コストがリストされている。
【0020】

【0021】
IDCT値の各ブロックでは、多くの高周波数項がゼロになる見込みが非常に高い。高周波数の隣接するゼロが除去される(何らかのまだ未指定の手段により)場合には、テーブルが次のようになる。
【0022】

【0023】
残りのゼロを何らかの手段により(例えば、ラン・レベル又はおそらく意義マップエンコーディングの使用を経て)暗示できる場合には、非ゼロ値の確率が次のようになる。
【0024】

【0025】
これらの非常に一般的な値が、各記号を表わすのに整数個のビットを使用しなければならないハフマンのような簡単なVLCエントロピー機構を使用してエンコードされる場合には、最適なものとは懸け離れたものになることが明らかである。というのは、非常に一般的な±1の値に対する最良の適合が2ビットであり、理想的な状態に対して記憶コストの約25%の増加を表わすからである。
【発明の概要】
【発明が解決しようとする課題】
【0026】
上述したように、演算エンコーディングは、分数個のビットで記号を表すことができ、潜在的に高い圧縮レベルを導くという点で、VLC/ハフマン解決策よりも優れている。問題は、適応できる機構は、若干シーケンシャルにデコードできるものであり、従って、クロック当たりに1つの完全な(マルチビット)記号というピークレートの達成を困難にすることである。
【0027】
デコードされたデータのプロデューサとコンシューマとの間にレート平滑FIFOを導入することができるが、これが単純な形態で表わされる場合には、非常に大きなFIFOを必要とすることになる。FIFOへ送られるデータに圧縮機構を適用して、FIFOに必要なサイズを減少することはできるが、FIFOの必要サイズを更に減少するために既知の圧縮機構の効率を高めることが望まれる。
【課題を解決するための手段】
【0028】
第1の態様において、本発明は、コンテクストベースの適応演算エントロピーコード化データをデコーディングする方法であって、
a)エンコードされたデータをデコーディングして、第1のデコードされたデータを発生するステップと、
b)記号の少なくとも一部分に対してコンテクストベースの適応演算エンコーディングを含む並列エンコーディング機構を使用して前記デコードされたデータをエントロピーエンコーディングして、第2のエンコードされたデータを発生するステップと、
c)前記第2のエンコードされたデータを先入れ先出し(FIFO)メモリに記憶するステップと、
d)前記第2のエンコードされたデータをFIFOメモリから読み取るステップと、
e)FIFOメモリから読み取ったデータをデコーディングして、デコードされたエントロピーコード化データである第2のデコードされたデータを発生するステップと、
を備えた方法を提供する。
【0029】
前記ステップb)において、エンコーダは、Nビット記号をエンコードし、この記号は、複数のストリームに分割され、そしてそれらストリームの少なくとも2つは、対応する数の演算エンコーディングユニットを使用して並列にエンコードされる。
【0030】
本発明は、
a)最大エンコードサイズを小さく保持することができ、
b)演算エンコーディングを使用することによりVLC方法より高い圧縮比を得ることができ、そして
c)ほとんどの環境の下で、クロック当たり1つ(多ビット)の記号というデコード/エンコードレートを達成することができる。
【0031】
本出願は、クロック当たり1つの記号というレートを実質上保証しつつも、相応の圧縮比を達成する演算エンコーディング及びデコーディングを使用してFIFOデータを圧縮及び解凍する方法を説明する。これは、エンコード/デコードプロセスの少なくとも一部分を並列化することにより、そしてある実施形態では、以前にデコードされた記号から記号に対するコンテクスト選択をデカップルすることでシステムのパイプライン動作を改善することにより、行われる。更に、「言語シンタックス」をリエンコーダ−デコーダのトップに適用して、H264ビデオストリームの多数の部分及び他のビデオ規格(簡単なVLCコードを使用するものでも)によりそれを使用できるようにし、これは、ひいては、これらデコーディングユニットに対するタイミング制約を容易にすることができる。
【0032】
この説明及び特許請求の範囲において、「演算コーディング」という語は、(特定の実施形態の特定の細部に関するものを除いて)レンジコーディングを含むものと解釈されない。
【0033】
エンコーダは、Nビットの数値である「記号」を受け入れ、そしてそれを単一クロックにおいてエンコードすることができる(非常に稀な環境を除いて)。このプロセスの一部分として、記号は多数のストリームに分割され、それらストリームの少なくとも2つは、多数の演算エンコーディングユニット、又は演算及びVLCエンコーディングの組み合わせで並列に圧縮される。他の実施形態では、演算エンコーディングに代わってレンジエンコーディングを使用することができる。というのは、それらが非常に類似しているからである。各ストリームの出力は、外部メモリに存在できるFIFO(1つ又は複数)へ送信される。マッチングデコーダは、FIFOからのデータを受け入れ、そしてオリジナルの記号を再デコードし、アッセンブルする。
【0034】
第2の態様において、本発明は、コンテクストベースの適応演算エントロピーエンコードデータをデコーディングする装置であって、エンコードされたデータをデコーディングして、第1のデコードされたデータを発生する第1デコーダと、その第1のデコードされたデータをエンコードするためのエンコーダであって、デコードされたデータの少なくとも一部分に対してコンテクストベースの適応演算エンコーディングを含む並列エンコーディング機構を使用して、第2のエンコードされたデータを発生するエンコーダと、その第2のエンコードされたデータを記憶するための先入れ先出し(FIFO)メモリと、前記第2のエンコードされたデータをFIFOの出力から読み取り、そしてその第2のエンコードされたデータをデコーディングして、デコードされたコンテクストベースの適応演算エントロピーエンコードデータを発生するためのデコーダと、を備えた装置を提供する。
【0035】
エンコーダは、Nビット記号をエンコードするように構成され、この記号は、複数のストリームに分割され、そしてそれらストリームの少なくとも2つは、対応する数の演算エンコーディングユニットを使用して並列にエンコードされる。
【0036】
エンコーダは、特定のシンタックスを解釈して、処理されているシンタックスエレメントに基づき演算エンコーダのコンテクストを選択するように構成された状態マシンを含み、シンタックスは、コンテクストが以前の記号に依存しないよう確保するために選択される。
【0037】
デコーダは、特定のシンタックスを解釈して、処理されているシンタックスエレメントに基づき演算デコーダのコンテクストを選択するように構成された状態マシンを含み、シンタックスは、コンテクストが以前のデコードされた記号に依存しないよう確保するために選択される。
【0038】
前記装置は、単一のFIFOを備え、前記エンコーダは、エンコードされたデータストリームを、FIFOへ書き込む前に、インターリーブするための手段を備え、そして前記デコーダは、FIFOから読み取ったデータストリームをデインターリーブするための手段を備えている。
【0039】
前記エンコーダは、可変長さコード化機構を使用して、同程度の確率の見込みがあるか又は存在する見込みが少ない各記号を表わすデータビットの部分をエンコードするための手段を備えている。
【0040】
これは、必要とされる演算エンコーダ/デコーダの数を減少することによりエンコーダ/デコーダのコストを最小限にすることができる。
【0041】
本発明の前記及び他の特徴並びに効果は、添付図面を参照した本発明の実施形態の以下の説明から明らかとなろう。
【図面の簡単な説明】
【0042】
【図1】本発明によるデコーダのブロック図である。
【図2】本発明によるデコーダに使用するためのエンコーダユニットの第1実施形態のブロック図である。
【図3】ハードウェアコストを節減する、本発明によるデコーダに使用するためのエンコーダユニットの第2実施形態のブロック図である。
【図4】制御シンタックス要素のビットエンコーディングの一例を示す図である。
【図5】図4のシンタックスで表わされたデータを処理するためのエンコーディング状態マシンの実施形態を示す図である。
【図6】図2又は図3のエンコーダ(及びマッチングデコーダ)に使用するためのALUユニットの実施形態を示す図である。
【図7】単一のFIFOが使用されるときのデータをインターリーブする構成を示す図である。
【図8】図2に示すエンコーダに対するマッチングデコーダの実施形態のブロック図である。
【図9】図4のシンタックスで表わされたデータを処理するためのデコーディング状態マシンの実施形態を示す図である。
【図10】一度に2ビットをエンコードする演算エンコーダを使用する図2及び図3の実施形態の変形を示す図である。
【図11】図10に示すエンコーダによりエンコードされたデータをデコーディングするためのデコーダの実施形態を示す図である。
【図12】演算エンコーディングのみを使用するエンコーダの別の実施形態を示す図である。
【発明を実施するための形態】
【0043】
図1は、本発明の実施形態をブロック図の形態で示す。圧縮されたデータが上流のデコーダユニット1へ供給される。このデコーダユニットは、例えば、H264ビデオエンコーディング規格に規定されたものでよい。デコーダ1から供給される値は、予想されるシンタックスにフォーマットされ、リエンコーダユニット2へ16ビット値のストリームとして入力される。リエンコーダ2は、これらの値を圧縮し、その結果を「先入れ先出し」(FIFO)メモリ3へ出力する。FIFO3は、単一のFIFOではなくFIFOのセットでもよい。デコーダユニット4は、FIFO3から圧縮されたデータを読み取り、そのデータを再拡張して、オリジナルデータストリームを得、そしてそれを出力5へ通す。特定記号のエンコーディングとデコーディングとの間には、FIFO3にどれほど多くのデータが維持されるかに基づいて、可変時間遅延が生じることが明らかである。本発明の目的は、パイプラインのストールを防止し、又は少なくとも必要なフレームデコードレートを満足するシステムを停止するストールを防止する最小サイズのFIFOを割り当てできるようにすることである。実際に、その構成体は、中央処理ユニットがFIFO3におけるデータの量を監視できるようにするための手段を含むことができる。
【0044】
本発明に使用するのに適したエンコーディングユニット2の実施形態を、図2を参照して以下に説明する。図2に示すように、上流のデコーダユニット1は、16ビット値Aをエンコーダユニット2に供給する。この16ビット値Aは、経路13を経て状態マシン10の第1入力に供給され、そして経路14を経て演算論理ユニット(ALU)20の第1入力に供給される。16ビット値の幾つかは、後続データの解釈を制御するためにシンタックスにより使用される。状態マシン内には、nビットカウンタ11(nは、例えば、9である)と、以前の「記号数」を記憶するためのメモリ12がある。実際には、考えられるエンコーディングモードの各々に対応する多数の「以前の記号数」レジスタがある。状態マシン10は、ALU20によって遂行されるオペレーションを含むリエンコーダ2における種々のサブユニットの振舞いを制御する。従って、状態マシン10からの出力は、ライン15を経てALU20の第2入力に供給され、そしてライン6を経て「他のビット選択」ユニット31の第1入力に供給される。
【0045】
ALU20は、16ビット値Aを受け取り、そしてそれに対して状態マシン10の制御の下で動作して、2つの出力を発生する。サインフラグである第1出力は、ライン21を経て「他のビット選択」ユニット31の第2入力に供給され、一方、非サインの16ビット値Bは、ライン22を経て先導1検出器30に供給され、該検出器は、最上位ビットの位置を決定し、そしてそれを範囲(0から16)の5ビット値Dとしてエンコードする。例えば、Bが0の場合には、Dも0であるが、Bが0x12の場合には、Dが5となる。値Bは、先導1検出器30から経路33を経て「他のビット選択」ユニット31の更に別の入力へ供給され、一方、値Dは、先導1検出器30から経路34を経て「他のビット選択」ユニット31の更に別の入力に供給される。「他のビット選択」ユニット31は、ライン33を経て与えられたB値から最上位ビットを剥離し、そしてライン21を経て受け取られたサインフラグを他のビットに付加して、値Cを発生する。この振舞いは、次のC擬似コードにより正確に記述される。
【0046】

【0047】
それにより得られて、値Cを作り上げるビット数は、0ないし16のいずれかであり、それらは、ライン35を経て「出力ストリーム0」ユニット32へ出力される。これは、ビットを収集して、全パケットを、経路38を経て出力マージユニット80へ出力する小型FIFOでよい。
【0048】
これは、次のことを除いて、H264規格で使用される指数関数的ゴロンエンコーディング機構における変形として見ることができる。
a)減算ユニットを必要とせず、従って、ハードウェアで実施するのが非常に低廉である。
b)Bの長さ、即ちD値は、単項エンコーディング方法ではエンコードされず、むしろ、別のエンコーディングユニットへ通される。
c)小さな値を好むエンコードされたデータの長さには若干の相違がある。
【0049】
先導1検出器30により発生された値Dは、ライン36を経て小さな先導1検出器40の入力に供給され、この検出器は、範囲(0から5)の3ビット値Fを生成する。値Dは、先導1検出器40から経路46を経て更に別の「他のビット選択」ユニット41へ供給される。又、値Fは、先導1検出器40から経路43を経て「他のビット選択」ユニット41へも供給される。ここでも、「他のビット選択」ユニット41は、Dの最上位ビットを除去し、残りのビットEを、ライン44を経て出力ストリーム1ユニット42へ出力するが、F=5、即ちD=16、従って、Eが0で、出力する必要がない特殊なケースは除く。この振舞は、次の擬似コードにより記述される。

F = FindLeading1Position(D);

IF((F < 2 ) OR (F==5))
{
NumBitsToOutput = 0;
}
ELSE
{
NumBitsToOutput = F 1;
}

Output(D, NumBitsToOutput, Stream1);
【0050】
出力ストリーム1ユニット42の出力は、更に、経路38を経て出力マージユニット18へ供給される。
【0051】
先導1検出器40からの3ビット値Fは、経路45を経て先導1検出器50の入力に供給される。先導1検出器50は、範囲(0から3)の2ビット値Hを発生する。3ビット値Fは、先導1検出器50から経路53を経て更に別の「他のビット選択」ユニット51へ供給される。更に、2ビット値Hは、経路54を経て「他のビット選択」ユニット51へ供給される。「他のビット選択」ユニット51は、暗示されたビット(先導1を含む)を除去して、出力Gを発生する。Fの限定入力値のために、出力Gは、単一ビット値を有し、ライン55を経て出力ストリーム2ユニット52へ供給され、従って、エンコードされる各記号に対して最大1ビットが必要とされる。これは、次の擬似コードにより記述される。

H = FindLeading1Position(F);

If(H < 2 )
{
NumBitsToOutput = 0;
}
Else
{
NumBitsToOutput = 1;
}

Output(F, NumBitsToOutput, Stream2);
【0052】
これは、次のテーブルにより要約することができる。

【0053】
2ビット値Hは、その後、演算エンコーディングを使用してエンコードされるので、G及びHへのFのエンコーディングが別の仕方で選択される場合には、システムがより効率的に機能できる。このため、「先導1検出器」50及び「「他のビット選択」ユニット51の別の実施形態では、次のエンコーディングが、次のテーブルにより要約されるように使用される。
【0054】

【0055】
この別の実施形態に対してデコーダ4に相補的なユニットが存在しなければならないことに注意されたい。
【0056】
別の実施形態では、両エンコーディング方法が、エンコーダ(及びデコーダ)に合体され、そして各状態マシンは、現在エンコーディングモード及びエンコードされるべきシンタックスエレメントに基づいて必要なエンコーディング及びデコーディング方法を選択する。
【0057】
値Hの2ビットは、先導1検出器50から経路62を経てコンテクストベースのバイナリー演算エンコーダ60の第1入力へ供給され、そして経路72を経て更に別のコンテクストベースのバイナリー演算エンコーダ70の第1入力へ供給される。これらのエンコーダは、維持されるコンテクストの数が著しく減少される以外、H264エンコーダに使用されるものと同様である。エンコーダ60及び70のコンテクスト制御は、状態マシン10により発生されて、経路17を経てエンコーダ60及び70の第2入力に供給される。エンコーダ60及び70からの最終的なビットストリームは、各出力ストリームユニット61及び71を経、経路75を経て、出力マージユニット80へ供給される。出力マージユニット80の出力は、エンコードされたデータであり、FIFO3の入力に供給される。
【0058】
図3に示す別の構成において、図2に示した実施形態は、出力ストリーム0ユニット32、出力ストリーム1ユニット42及び出力ストリーム2ユニット52を、少量のビットシフトハードウェアを使用してC、E及びG信号を連結する単一の出力ストリームユニット39に置き換えることにより変更される。これは、実施コストを減少することができる。この変更は、ALU20のような図2の実施形態の無関係な部分には影響しないことに注意されたい。
【0059】
状態マシン10、ALU20、並びにエンコーダユニット60及び70の更に詳細な説明に進む前に、データストリームに対する支配シンタックスを見ることが重要である。これは、それ自体、制御値及びエンコードされるべき記号より成る16ビット値のストリームに過ぎない。これは、次のEBNF(Extended Backus-Naur Form)表現により最良に要約される。
【0060】

【0061】
図4に示すように、好ましい実施形態では、“UNIT_SEPARATOR”100、“Data_Block_Header”101及び“NumSymbolsLess1”102も、「16ビット」値である。この実施形態では、“UNIT_SEPARATOR”トークンは、16ビット値、0x3としてエンコードされる。“Data_Block_Header”トークン101は、2つのフィールド、即ち14ビットの“Hardware_Code”値101a、及び2ビットの“encoding mode”フィールド101bより成る。この後者のフィールドは、3つの考えられる値を次のようにエンコードする。
【0062】

【0063】
所与のエンコーディングでは、“UNIT_SEPARATOR”及び“Data_Block_Header”は、最後の2ビットが常に異なるので、互いに間違えることはあり得ない点に注意されたい。又、これらの値は、数字的にできるだけ小さくなるように選択される。というのは、圧縮システムが小さな値を好むので、これが圧縮効率を改善するからである。
【0064】
“HW_CODE”値は、エンコーダ/デコーダモジュールの各側でユニットにより使用するための任意のフィールドであるが、可能な限り小さな値が選択されることが推奨される。“Data_Block_Header”は、RUN_LEVEL_PAIR、SIGNED、又はSIG_MAP_VALUESの1つであるエンコーディング方法を含む。これらの名前は、おそらくそれらの意図された使い方を表すが、汎用性も高い。別の実施形態では、SIG_MAP_VALUESモードは、除去されてもよいし、又は優勢な大きな記号値を見込むもののような別のエンコーディング機構と置き換えてもよい。別の実施形態に対する他の組合せ又はエンコーディングパターンは、当業者に明らかであろう。
【0065】
RUN_LEVEL_PAIRモードは、ペアのリストより成るデータに対して最適なものとされ、各ペアは、非サイン値と、それに続く(非ゼロ)サイン値で構成される。SIGNEDモードは、単に、サイン値のリストで構成され、そしてSIG_MAP_VALUESは、単一の非サイン値と、それに続く(非ゼロ)サイン値のリストで構成される。全てのケースにおいて、小さな値がデータを支配することが一般的に予想される。
【0066】
これらのエンコーディング方法は、供給された記号リストをどのように処理するか、例えば、ALU20がどんなオペレーションを遂行すべきか、且つCABACエンコーダユニット60及び70にどんなコンテクストを使用すべきか選択することを状態マシン10に命令する。
【0067】
“Separable_Unit”論理的グループ分けの目的は、システムがFIFOにおける圧縮されたデータに再同期ポイントをもつのを許すことである。状態マシン10のエンコーダは、各“Separable_Unit”の後に、経路18を経て内部バッファの出力ストリーム0ユニット32、出力ストリーム1ユニット42及び出力ストリーム2ユニット52をフラッシュし、そして経路19を経て出力3ユニット61及び出力4ユニット62をフラッシュし、必要に応じて、デコーダによりこれらを順にスキップできるようにする。例えば、H264では、フレームは、ある数の独立した「スライス」より成り、これらは、送信データが崩壊した場合に部分エラー回復を許すように意図される。スライスが“Separable_Unit”にパックされる場合には、デコーダ及びパイプラインの残りの部分によりそれを完全にスキップすることができる。この機構は、多数の異なるストリームを、例えば、スライスレベルで混合するのも許す。
【0068】
各“Separable_Unit”内のデータは、Data_Blockの任意のリストより成り、その各々は、使用すべきエンコーディングの方法と、エンコードされるべき記号の数(1未満)と、ブロックにおいてエンコードされるべき記号とを記述するヘッダを含む。Data_Blockは、典型的に、IDCT係数のブロックのような記号の論理的グループに対して使用されるか、又はマクロブロックに属するモーションベクトル値のセットに対して使用される。
【0069】
エンコーダのための状態マシンの概略が図5に示されている。プロセスがベース/アイドル状態200でスタートすると仮定すれば、次の予想されるデータアイテムは、“UNIT_SEPARATOR”又は“Data_Block_Header”である。これらの値のいずれかが受け取られると、デコードプロセスについて考慮するときに明らかとなる理由で、それが全く同様にエンコードされる(201)。状態マシン10は、状態202へ進む。これら記号の後に、常に、「非サイン」の16ビット値が続き、これは、任意の値であるか、又はそれに続くデータの長さを表す。又、これらの値は、両方とも同様にエンコードされる(210)。以前の記号が“UNIT_SEPARATOR”であった場合には、経路211が取られ、状態マシン10は、“Separable_Unit”のエンコーディングを終了し、演算エンコーダのコンテクスト/統計学的情報をリセットし、そしてバッファ220をフラッシュするようにエンコーダに通知する。これは、多数のクロックサイクルを要するが、非常に頻度の低いオペレーションであることが予想されるので、全コストを無視できる。これを達成するために、状態マシン10は、経路18を経てバッファ32、42、52のコンテンツを空にし、経路19を経てバッファ61及び71のコンテンツを空にし、且つ経路17を経てエンコーダ60及び70のコンテクスト統計学的情報をリセットするためのインストラクションを発行する。
【0070】
そうではなく、“Data_block_header”が状態201において受け取られた場合には、状態マシン10は、経路212をたどり、少なくとも1つのデータ記号230を受け取ることを期待する。これは、“Data_block_header”に定義されたモードを使用してエンコードされる(240)。同時に、状態マシン10の内部カウンタ11がモードに基づいて初期化される。モードが“SIGNED”又は“SIG_MAP”である場合には、それが、供給されたNumSymbolsLess1にセットされ、さもなければ、NumSymbolsLess1*2+1にセットされる。後者が行われるのは、“RUN_LEVEL”値が常にペアで供給されて、その供給された値から冗長ビットを除去するからである。次いで、状態270及びプロセス280は、データブロックで供給された残りの記号をエンコードした後に、ベース状態200に復帰する。プロセス208は、状態マシン10のカウンタ11を減少させ、従って、データブロックの全ての記号がエンコードされたときにベース状態200に到達する。
【0071】
ALU20の制御と、演算エンコーダ60、70の振舞いを支配するコンテクスト情報とについて、以下に説明する。文字通り数百のコンテクストを有するH264 CABACとは異なり、好ましい実施形態は、6個のコンテクストグループのセットしか有していない。各グループは、2つのCABACユニットの各々について1つの、一対のコンテクスト値を有する。(コンテクストとは、全ての意図及び目的で2つのバイナリー値0及び1の現在の確率を記憶する。H264 CABAC設計では、これが8ビット値にパックされる。実施が容易であるために、同じ機構が実施形態により使用されてもよい。)
【0072】
又、各グループには、ALU20により実行されるオペレーションに対する設定も関連付けられる。これらのオペレーションを、図6を参照して以下に説明する。到来するデータ値Aに対して実行されて出力値Bを発生することのできる任意のオペレーションが3つある。この図において、これらは、3つの直列ステージとして説明されることに注意されたい。これは、単に明瞭化のために行われるが、ハードウェアシステムは、これらオペレーションを結合してもよく、そのようにした場合には、面積が減少され及び/又はタイミングが改善される。オプションがイネーブルされない場合には、そのオプションへの入力が、その出力へ通される。
【0073】
第1のオプション300は、到来する値Aから以前のNumSymbolsLess1値12を減算して、A’を発生する。「C擬似コード」では、このオペレーションは、次の通りである。

IF(option_300_enabled)
{
A' = A Prev_NumSyms;
}
ELSE
{
A' = A;
}
【0074】
第2の任意のオペレーション301は、その入力A’の絶対値を計算し、そしてオリジナルサイン値フラグも出力する。「C擬似コード」では、このオペレーションは、次の通りである。
【0075】

【0076】
最終的に、オプション302は、入力値A”から1を減算し、最下位16ビットを保持する。「C擬似コード」では、このオペレーションは、次の通りである。

IF(option_302_enabled)
{
B = (A'' 1) & 0xFFFF;
}
ELSE
{
B = A'';
}
【0077】
ALUに対する6個のコンテクストグループ及びそれらの設定は、次のテーブルに要約される。
【0078】

【0079】
各“Separable_Unit”の始めにコンテクストに指定される、コンテクストのための初期確率値は、例示のために示されたものに過ぎない。好ましい実施形態では、これらの値は、例えば、CPUによりプログラムできるレジスタのセットから得られる。又、例示値は、SIGMAPエンコードモードを要求しない実施形態により生成されたものであり、従って、それに対する初期確率は含まれない。
【0080】
コンテクストグループと図5に示す状態との関係を以下に説明する。
状態201において、「ヘッダ」グループが選択される。
【0081】
状態210において、「デルタ長さ」グループが使用される。テーブルから明らかなように、供給された「長さ1」値が以前の値から減算され、その結果の絶対値が取り出される。この結果(及び減算結果のオリジナルサイン)がエンコードされる。
【0082】
状態240及び280において、ヘッダデータで指定されたエンコーディングモードに基づいて残りの4つのコンテクストグループ‘S’、‘RL_U’、‘SM_M’又は‘S_NZ’の1つを使用して記号値がエンコードされる。‘SIGNED’モードを使用してエンコーディングするときには、データブロックにおける全ての残りの値に対して‘S’グループが使用される。
【0083】
‘RUN_LEVEL’モードでエンコードするときには、選択されたグループが‘RL_U’と‘S_NZ’との間で交替し、一方、‘SIGMAP’モードの場合には、第1記号が‘SM_M’モードでエンコードされ、そして残りが‘S_NZ’でエンコードされる。
【0084】
実施形態により多数のストリームが発生されるときには、単一のFIFOを有するのが好ましい。というのは、これは、システムが利用可能な外部メモリ空間を先験的に多数の固定サイズのFIFOに分割する必要がないことを意味するからである。従って、単一の外部FIFOが存在する実施形態では、エンコーダにおいて種々の出力ストリームをインターリーブし、次いで、デコーダへデータが読み込まれるときにそれらをデインターリーブする効率的な手段があるのが好ましい。これは、実際には、多数の理由で、重要なタスクである。
a)ストリームは、各々、記号当り異なる数のビットを発生し、
b)特定の記号‘x’に対して、‘C’、‘E’及び‘G’に対応するビットは、ほとんど即座に発生されるが、演算エンコーダは、それらのエンコードされたビットを、ある数の記号の後まで発生しないことがある。ある状況において、これは、数十又は数百個の記号の後であり、そして
c)記号のデコーディングを開始するために、ストリームに対する全ての関連データがデコーダにおいて同時に入手できねばならない。
【0085】
更に、メモリサブシステムは、効率的に使用されねばならない。多くのシステムでは、これは、読み取り及び書き込みをあるサイズのバーストで行わねばならないことを意味し、これは、数十ないし数百のバイトを必要とすることがある。例えば、個々のバイトをランダムにアクセスすることは、効率的でない。
【0086】
この問題に対する解決策を、図7を参照して以下に述べる。この実施形態ではサイズが約4MバイトであるFIFOメモリ500は、固定サイズの「割り当てブロック」501へ論理的に分割され、各ブロックは、最小の効率的メモリ転送バーストサイズの倍数となるように選択されるのが好ましい。好ましい実施形態では、各ブロックは、サイズが256ビットである。FIFOメモリに対する3つの「ポインタ」が維持される。「分離可能ユニットヘッド」510は、エンコーダ2によって現在記憶されている分離可能ユニットのためのデータの開始を指す。「分離可能ユニットテール」511は、デコーダ4により現在処理されている分離可能ユニットの開始を指す。これが「分離可能ユニットヘッド」ポインタと同じように前進する場合には、デコーダは、エンコーダがその現在の分離可能ユニットを終了するまでストールする。
【0087】
「フリーブロックポインタ」512は、エンコーダがその出力ストリームの1つから新たなブロックの価値あるデータを発生するときに増加される。これがFIFOメモリブロックの終りに到達すると、開始点へラップアラウンドする。「フリーブロックポインタ」が「分離可能ユニットテール」に到達する場合には、FIFOがいっぱいになったと考えられ、エンコーダは、デコーダがその現在分離可能ユニットを終了するまでストールし、そしてポインタを、次に記憶された分離可能ブロックの開始点へ前進させる。
【0088】
各割り当てブロックは、データ部分512及び「次」のポインタ513を含む。好ましい実施形態では、「次」のポインタは、16ビット値である。これは、ブロックのチェーンにおいて「次」の割り当てブロックをインデックスし、次のように使用される。
【0089】
N個の出力ストリームをもつ実施形態のマージユニット80内で、新たな「分離可能ユニット」の開始に、最初のN個の割り当てブロックが、現在の分離可能ブロックの開始点(「フリーブロックポインタ」に等しい)に対して、N個のストリームに予め指定され、そして「フリーブロックポインタ」がNだけ前進される。マージユニットは、割り当てユニットのサイズのN個(多重バッファされる場合にはそれ以上)のバッファと、N個の16ビットアドレス値、A[0]・・・A[N−1]とを含む。アドレス値は、「分離可能ユニットヘッド」ないし「分離可能ユニットヘッド+(N−1)」の値に各々初期化される。データがそれに対応するストリーム[i]により供給されるときには、マージユニットが各バッファ[i]を並列に充填し始める。バッファ[j]がいっぱいになると、バッファ[j]の「次のポインタ」が「フリーブロックポインタ」の値にセットされ、バッファ[j]がA[j]のアドレスに書き込まれ、A[j]が「フリーブロックポインタ」にセットされ、そして「フリーブロックポインタ」が増加される。
【0090】
デコーダ4において要求されるマッチングデマージユニットは、ブロックを単に読み取り、そしてコンテンツをそれらの各ストリームに転送する。ある事項に対して読み取るべき次のブロックが、現在読み取られたブロックに含まれたポインタにより指示される。
【0091】
デコーダ4は、本質的にエンコードプロセスの逆であるデコーディングプロセスを遂行する。図8は、図2のエンコーダにより発生されたエンコードされたデータをデコードするのに適したデコーダをブロック図の形態で示す。
【0092】
図8に示すデコーダは状態マシン800を備え、これは、Nビットカウンタ801及び以前の数字記号のレジスタ802を含む。状態マシン800の出力は、経路803を経て演算論理ユニット(ALU)860の入力に接続されると共に、経路804を経て他ビット選択ユニット851の入力に接続される。入力デマージユニット805は、FIFOから受け取られたデータを並列ストリームに分割し、その出力は、経路859を経て、入力ストリーム0ユニット850、入力ストリーム1ユニット840、及び入力ストリーム2ユニット830へ接続されると共に、経路819を経て、入力3ユニット821及び入力4ユニット811へ接続される。状態マシン800の更に別の出力は、経路806を経て2つのコンテクストベースの適応演算(CABAC)デコーダ810及び820の入力に接続される。この経路は、810及び820に使用されるコンテクストを選択して、現在ビットをデコードする。入力3ユニット821は、その出力が経路822を経てCABACデコーダ820の更に別の入力に接続され、一方、入力4ユニット811は、その出力が経路812を経てCABACデコーダ810の更に別の入力に接続される。
【0093】
CABACデコーダ810及び820の出力は、経路823を経て加算先導1ユニット832及び他ビット選択ユニット831の入力に接続される。加算先導1ユニット832の出力は、経路833を経て、更に別の加算先導1ユニット842及び更に別の他ビット選択ユニット841の入力に接続される。加算先導1ユニット842の出力は、経路843を経て、最終的な加算先導1ユニット852及び最終的な他ビット選択ユニット851の入力に接続される。加算先導1ユニット852の出力は、経路853を経てALU860の更に別の入力に接続される。
【0094】
入力ストリーム2ユニット830の出力は、経路834を経て他ビット選択ユニット831の更に別の入力に接続される。同様に、入力ストリーム1ユニット840の出力は、経路844を経て他ビット選択ユニット841の更に別の入力に接続され、一方、入力ストリーム0ユニット850の出力は、経路854を経て他ビット選択ユニット851の更に別の入力に接続される。
【0095】
他ビット選択ユニット831の出力は、経路835を経て加算先導1ユニット832の更に別の入力に接続される。同様に、他ビット選択ユニット841の出力は、経路845を経て加算先導1ユニット842の更に別の入力に接続され、そして他ビット選択ユニット851の出力は、経路855を経て加算先導1ユニット852の更に別の入力に接続される。デコードされたサインフラグを任意に含む他ビット選択ユニット851の更に別の出力は、経路856を経て、ALU860の更に別の入力に接続される。
【0096】
状態マシン800の更に別の再スタート出力は、経路807を経て、入力ストリーム0ユニット850、入力ストリーム1ユニット840及び入力ストリーム2ユニット830のリセット入力に接続され、一方、状態マシン800の同じ出力が経路808を経て入力3ユニット821及び入力4ユニット811のリセット入力に供給される。この再スタート出力は、各Separable_Unitの始動時に状態マシン800によりシグナリングされる。
【0097】
オペレーション中に、FIFO3からのデータは、入力デマージユニット805へ供給され、このユニットが発生する5つのデータストリームは、入力データストリーム0ユニット850、入力ストリーム1ユニット840、入力ストリーム2ユニット830、入力3ユニット821及び入力4ユニット811へ供給される。入力3ユニット821は、データストリームの一部分をCABACデコーダ820へビット0データとして供給し、一方、入力4ユニット811は、データストリームの一部分をCABACデコーダ810へ供給する。CABACデコーダ810及び820は、図2のエンコーダ60及び70へ最初に供給された信号Hを再生する。
【0098】
この点において、定義されたシンタックスは、演算デコーダのためのコンテクスト選択を、その直前の記号の値から分離するので、ハードウェアデコーダは、デコーディングステージにどこかに挿入されるパイプラインステージを有してもよく、ストールを招くことはないことに注意されたい。このようなパイプラインステージの便利な場所は、Hが計算されるポイントである。Hの値は、「他ビット選択」ユニット831及び加算先導1ユニット832へ供給される。入力ストリーム2ユニット830は、入力デマージストリームから値Gを選択し、そしてそれを「他ビット選択」ユニット831へ供給する。他ビット選択ユニット831は、Hの値に応答してGの値から値Fを発生する。加算先導1ユニット832は、値Hにより指定された位置に基づく新たな最上位ビットを加算して、3ビット値Fを発生する。これは、エンコーダユニット50ないし52により実行されるプロセスの逆である。
【0099】
加算先導1ユニット832の出力に発生された3ビット値Fは、更に別の加算先導1ユニット842の第1入力及び更に別の「他ビット選択」ユニット841の第1入力に供給される。入力ストリーム1ユニット840は、値Eを、「他ビット選択」ユニット841の第2入力に供給する。「他ビット選択」ユニット841は、その入力に値E及びFを取り込み、そして値Dを発生する。値Dは、加算先導1ユニット842の第2入力に供給され、該ユニットは、データDに対する5ビット値をその出力に発生する。加算先導1ユニット842からの出力は、更に別の加算先導1ユニット852の第1入力及び更に別の「他ビット選択」ユニット851の第1入力に供給される。「他ビット選択」ユニット851は、入力ストリーム0ユニット850の出力からの信号Cをその第2入力に受け取る。これは、エンコーダユニット40、41及び42により遂行されるプロセスの逆である。
【0100】
又、「他ビット選択」ユニット851は、状態マシン800から経路804を経て制御入力も受け取る。又、「他ビット選択」ユニット851は、状態マシン800から経路804を経て制御入力も受け取る。「他ビット選択」ユニット851は、出力信号Bを発生し、これは、加算先導1ユニット852の第2入力に供給される。又、「他ビット選択」ユニット851は、「サインアウト」出力も発生し、これは、経路856を経て演算論理ユニット(ALU)860の入力へ供給される。加算先導1ユニット852は、信号Bをその出力に発生しそしてこれをALU860の更に別の入力に供給する。これは、エンコーダユニット30、31及び32により遂行されるプロセスの逆である。例示の目的で、ユニット850、851及び852のファンクションを擬似コードで以下に示す。
【0101】

【0102】
状態マシン800が発生する出力は、デコーダ820及び810へ供給され、経路806を経てコンテクスト制御データが転送される。又、状態マシン800が発生する制御出力は、経路803を経てALU860の更に別の入力へ供給される。状態マシン800からの更に別の出力は、入力ストリーム0ユニット850、入力ストリーム1ユニット840及び入力ストリーム2ユニット830の入力に供給される再スタート信号と、入力3ユニット821及び入力4ユニット811に供給されるフラッシュ信号とを発生する。演算論理ユニット860が発生する出力Aは、出力値コードであって、状態マシン800にも供給される。デコーダは、図2に示されたエンコーダとは逆のファンクションを有効に遂行し、従って、H264デコーダから図2に示すエンコーダへ供給されるデータを再生する。
【0103】
図6に戻り、デコーダALU860の振舞いを説明する。これは、本質的に、‘B’値を‘A’値に変換するという点で、エンコーダALU20のオペレーションの逆を遂行する。テーブルのコンテクストを再び参照すれば、所与のコンテクストに対してサブユニット302がエンコーダにおいてイネーブルされた場合には、そのコンテクストがデコーダに使用されるときに「加算1」ユニット310がデコーダALUにおいてイネーブルされる。同様に、ユニット301がエンコードに対してイネーブルされる場合には、「任意の否定」ユニット311がイネーブルされる。最終的に、エンコード手順においてコンテクストに対してユニット300がイネーブルされると、デコード手順においてそのコンテクストに対して「加算以前のNumSyms」312がイネーブルされる。ユニット311は、次の擬似コードにより説明される。
【0104】

【0105】
ユニット300及び302の前記説明を読めば、ユニット310及び312により遂行されるオペレーションが当業者に明らかであろう。
【0106】
図9に振舞いを示すデコーダ状態マシン800は、図5のエンコーダ状態マシン10の振舞いに類似している。プロセスがベース/アイドル状態900でスタートすると仮定すれば、システムは(16ビット)記号をデコードし(901)、これは後続システム5へ出力される。次いで、状態マシン800は、別の16ビット値910をデコードすることが期待される。901でデコードされた値がUNIT_SEPARATORである場合は、デコーダは、経路911を経てステージ920へ至り、これは、出力を終了し、エンコーダの統計学的情報を再初期化し、そして入力バッファをリセットした後に、状態900へ戻る。
【0107】
そうではなくて、901でデコードされた値がData_Block_Headerである場合は、システムは、第1データ記号をデコードし(940)、次いで、ステップ910でデコードされてカウンタ801に記憶されたカウント値を使用して、残りの記号を通して繰り返した後に、最終的に、状態900に復帰する。
【0108】
シンタックスは、直前の記号に基づいて「分岐」判断を行わないので、1つの記号のデコーディングの若干を、次のデコーディングと重畳させ、容易なハードウェアパイプライン構成を許すことに注意されたい。例えば、ステップ901及び902が完了する前に、デコーディングをスタートすることができる。
【0109】
上述したように、所与のシンタックスは、ハードウェアの容易なパイプライン構成を許すが、使用できる唯一のシンタックスがこの特性を有することを意味するのではない。実際に、ここに述べるシンタックスは、全ての用途には適さないことがある。ここに述べるシンタックスでは、「データブロック」でエンコードされるべき記号の数を、データ送信の前に、エンコーダ2へ送信しなければならない。あるアプリケーションでは、この情報が前もって分からないことがあり、従って、バッファすることが不可能であるか又は少なくとも高価なバッファを伴うことになる。この制約をもたない別のシンタックスは、次の通りである。
【0110】

【0111】
このシンタックスでは、1つの16ビット値、例えば、ゼロが予約され、そして後続値を「最後」であるとして識別する。次いで、全ての値が調整されて、それらが、予約された値を偶発的に使用しないようにする。例えば、エスケープコードを使用する他の機構が当業者に明らかであろう。ここに示す実施形態は、この又は他の別のシンタックスを使用するように変更することができる。
【0112】
本発明は、デコードされた到来するデータを、そのデータの部分に対してコンテクストベースの適応演算エンコーディングを使用する第2の並列エントロピーエンコード化構成へ再エンコーディングし、コンテクストの数を、H264規格に使用されるものから減少し、そしてコンテクストを直前のデコードされた記号とは独立したものにするようにシンタックスを選択して、デコーダが、エンコードされたデータの特定の部分をデコードするのに要する時間にあまり変化がない状態で、エンコードされたデータをデコードできるようにすることにより、最小サイズのFIFOを使用できるようにすることが明らかであろう。
【0113】
図2を参照して述べたものとは別のエンコーダの実施形態では、図10に示すように、エンコーダ2における2つの単一ビットCABACエンコーダユニット60、61及びそれに関連するストリームデータユニット61、71が、単一の‘CABAC’エンコーダ60aに置き換えられ、これは、一度に2ビットを直接エンコードし、そして単一ストリーム出力ユニット61aへ出力する。この単一のCABACエンコーダ61aは、60又は61(コスト〜O(2))より高価であるが(コストはほぼO(4))、結合したユニットよりは若干安価であり、出力ストリームの1つに対する必要性も排除する。当然、同等の2ビットCABACデコーダユニットが、図11に示すように、マッチングデコーダ4に存在することになろう。ここで、入力デマージャー805aがデータを入力3FIFO821aに供給し、これが、次いで、データを2ビットCABACデコードユニット820aに供給する。これは、値Hの量ビットを発生し、それらは、上述したように、「他ビット選択」ユニット831及び加算先導1ユニット832へ供給される。又、このシステムを使用する実施形態は、Hの4つの考えられる各値が、それ自身の正確な確率値を有し、従って、より高い圧縮ファクタを与えるという点で、前記実施形態に勝る効果を有する。(前記実施形態では、Hの各値の確率が、Hを形成する2つのビットの確率の積から有効に形成され、従って、これらは、最適状態に満たない仕方で相互作用し得る。)
【0114】
更に別の実施形態では、図10の2ビットエンコーダ/デコーダ実施形態が、図3に示す実施形態でなされた変更と組み合わされる(デコーダのためのマッチングユニットと共に)。この実施形態では、出力ストリームの数が丁度2つに減少され、これは、エンコーダユニット39及び61aに対応する。この実施形態は、図7のマージ構造及びユニット80、805を見合わせ、エンコーダユニットとデコーダユニットとの間に2つの独立したFIFOを維持するだけである。
【0115】
上述した実施形態では、エンコードされるべきデータの上位ビットの大半が「直接エンコーディング」機構で取り扱われ、従って、それが存在するときには、ビットごとに50:50の確率を仮定する。これらビットの幾つかを演算エンコーディングでエンコードすることにより、より経費のかかる実施であることを犠牲にして、圧縮比のある程度の改善を得ることができる。典型的なビデオデータの分析から、値Bの先導意義ビットが除去されたときには、Bの、次の最上位5ビット(それらが存在するとき)がゼロである典型的な確率は、次のテーブルにより要約される。
【0116】

【0117】
明らかなように、これらビットがゼロであるのは、50:50確率より高く、従って、ある数の次の最上位ビットを演算エンコーダ/デコーダでエンコードすることにより、高レベルの圧縮を達成することができる。しかしながら、演算エンコーディングの経費が与えられると、より多くの演算エンコード/デコードユニットの追加が、利益を急速に縮小する結果となることに注意するのが重要である。
【0118】
例えば、このようなビットが、エンコードされる各記号に実際に存在する確率は、テーブルの第3列に要約されたように、著しく速く低下する。ここに示す実施形態は、最上位ビットの位置を暗示するので、使用しないビットに対する記憶コストは実際上生じない。それ故、このような実施形態では、コスト効率が良いのは、演算エンコーディングを使用して、せいぜい、次の最上位値をエンコードすることだけである。
【0119】
図11に示すように、概念的に簡単であるが、一般的に効率の低い別の実施形態では、値Bは、同程度の確率であるサインビットはさておき、単にコンテクストベースの演算エンコーダユニットを使用してエンコードされる。値Bは、16ビットに分割され(1000)、そして最上位の15から最下位の0まで番号が付けられた各ビットは、1115ないし1100で各々示されたそれ自身の各CABACユニットへ供給される。これらからの出力ストリームは、1215ないし1200であり、そしてサインビット値1216は、それが存在するときに、上述したように、ユニット80を経てマージされる。
【0120】
示唆された実施形態(例えば、図2又は図10)のいずれかへの拡張において、M個のエンコーダを並列に使用して、エンコーディングレートを高めることができる。16ビット記号は、ラウンドロビンの順序で、M個のエンコーダの各々に順次に送信される。同様に、各エンコーダは、順次に結果を発生する。このような構成において、幾つかの簡単化が可能となる。
a)増加した並行性で個々のユニットのゆっくりとしたエンコードレートが相殺されるので、個々のエンコーダ/デコーダをゆっくりと動作することができる。
b)デコーダは並列に動作され、直列化ペナルティを招くことなく以前の記号をデコーディングするデコーダの状態を知ることができないので、コンテクストが簡単化される。
【0121】
先の実施形態において拡張する別の実施形態では、各エンコーダは、最初に入力値をVLCフォーマット、好ましくは、指数関数的ゴロンへ変換する「直列化ユニット」を含ませることにより、全てのデータに対して演算エンコーディングを使用する。次いで、各エンコーダは、それ自身の演算エンコーダを使用して、一度に1ビットずつ、多数のクロックサイクルにわたり、そのVLCをエンコードする。各ビット位置が、それ自身のコンテクストを有するのが好ましい。数字Mは、各記号をエンコードするのに必要なVLCビットの平均数より大きくなるように選択され、従って、平均で、リエンコーダ及びデコーダが、非常に稀な環境はさておき、クロック当たり1記号より高速で動作することを許す。
【0122】
しかしながら、本発明のこれら最後の実施形態は、先の実施形態と同じ圧縮性能を達成できない。というのは、エンコーディング/デコーディングユニットが、エンコーディング/デコーディングタスク間に、依存性、ひいては、直列化を導入せずに、統計学的情報を共有できないからである。
【0123】
又、本発明は、他のビデオデコーディング規格、例えば、VC1、又はおそらく、オーディオデコーディング規格にも適用でき、従って、より簡単なフロントエンドのエントロピーデコーディングユニットを使用できるようにする。同様に、均一に配布されず(即ち、圧縮可能であり)そしてFIFOを経てレートフィルタ(例えば、おそらく、ある送信システムを経てバーストで受信)されねばならないデータを有する他の(非ビデオ)システムも、本発明から利益を得ることができる。
【0124】
以上に鑑み、本発明の概念は、次の方法にあることが明らかであろう。
エントロピーデコーディング機構をレート平滑化する方法であって、
a)第1のエントロピーエンコードされた表現をデコードされた表現へと変換するステップと、
b)前記デコードされた表現を、データの部分に対してコンテクストベースの適応演算エンコーディングを含む並列エンコーディング機構を使用する第2のエントロピーエンコードされた機構へとエンコードするステップと、
c)前記第2のエンコードされたデータをFIFOに記憶するステップと、
d)前記FIFOから第2のデータを検索するステップと、
e)第2のデータをデコードされたデータへとデコーディングするステップと、
を備えた方法。
【0125】
この方法は、更に、ほぼ同程度の確率のデータ又は非常に発生頻度の低いデータに対して安価なエンコーディング技術を使用すると共に、他の部分に対して演算コーディングを使用することを含んでもよい。
【0126】
この方法は、更に、少なくとも1つの記号によりデコードコンテクストをデカップルする制御シンタックスの適用を含んでもよい。

【特許請求の範囲】
【請求項1】
コンテクストベースの適応演算エントロピーコード化データをデコーディングする方法において、
a)エンコードされたデータをデコーディングして第1のデコードされたデータを発生するステップと、
b)記号の少なくとも一部分に対してコンテクストベースの適応演算エンコーディングを含む並列エンコーディング機構を使用して前記デコードされたデータをエントロピーエンコーディングして、第2のエンコードされたデータを発生するステップと、
c)前記第2のエンコードされたデータを先入れ先出し(FIFO)メモリに記憶するステップと、
d)前記第2のエンコードされたデータをFIFOメモリから読み取るステップと、
e)FIFOメモリから読み取ったデータをデコーディングして、デコードされたエントロピーコード化データである第2のデコードされたデータを発生するステップと、
を備えた方法。
【請求項2】
前記ステップb)において、エンコーダは、Nビット記号をエンコードし、この記号は、複数のストリームに分割され、そしてそれらストリームの少なくとも2つは、対応する数の演算エンコーディングユニットを使用して並列にエンコードされる、請求項1に記載の方法。
【請求項3】
前記ステップb)において、コンテクストの数は、データを最初にエンコーディングするのに使用されるものより小さい、請求項1又は2に記載の方法。
【請求項4】
前記ステップb)において、特定のシンタックスが解釈され、そして演算エンコーディングのためのコンテクストは、エンコードされるシンタックスエレメントに基づいて選択され、前記シンタックスは、コンテクストがその直前にエンコードされた記号に依存しないよう確保するように構成される、請求項1から3のいずれかに記載の方法。
【請求項5】
前記ステップb)において、ほぼ同程度の確率であるデータをエンコードするのに演算コーディングが使用されない、請求項1から4のいずれかに記載の方法。
【請求項6】
ほぼ同程度の確率であるデータは、可変長さコーディング機構を使用してエンコードされる、請求項5に記載の方法。
【請求項7】
前記ステップb)において、発生確率の低いデータをエンコードするのに演算コーディングが使用されない、請求項1から6のいずれかに記載の方法。
【請求項8】
発生確率の低いデータは、可変長さコーディング機構を使用してエンコードされる、請求項7に記載の方法。
【請求項9】
コンテクストベースの適応演算エントロピーエンコードデータをデコーディングする装置において、エンコードされたデータをデコーディングして、第1のデコードされたデータを形成する第1デコーダと、その第1のデコードされたデータをエンコードするためのエンコーダであって、デコードされたデータの少なくとも一部分に対してコンテクストベースの適応演算エンコーディングを含む並列エンコーディング機構を使用して、第2のエンコードされたデータを発生するエンコーダと、その第2のエンコードされたデータを記憶するための先入れ先出し(FIFO)メモリと、前記第2のエンコードされたデータをFIFOの出力から読み取り、そしてその第2のエンコードされたデータをデコーディングして、デコードされたコンテクストベースの適応演算エントロピーエンコードデータを発生するためのデコーダと、を備えた装置。
【請求項10】
前記エンコーダは、Nビット記号をエンコードするように構成され、この記号は、複数のストリームに分割され、そしてそれらストリームの少なくとも2つは、それに対応する数の演算エンコーディングユニットを使用して並列にエンコードされる、請求項9に記載の装置。
【請求項11】
前記エンコーダは、特定のシンタックスを解釈して、処理されるシンタックスエレメントに基づき演算エンコーダのコンテクストを選択するように構成された状態マシンを含み、前記シンタックスは、コンテクストが直前の記号に依存しないよう確保するために選択される、請求項9又は10に記載の装置。
【請求項12】
前記デコーダは、特定のシンタックスを解釈して、処理されるシンタックスエレメントに基づき演算デコーダのコンテクストを選択するように構成された状態マシンを含み、前記シンタックスは、コンテクストが直前にデコードされた記号に依存しないよう確保するために選択される、請求項11に記載の装置。
【請求項13】
コンテクストの数は、最初にエンコードされたデータをエンコードするのに使用されるコンテクストの数より小さい、請求項9から12のいずれかに記載の装置。
【請求項14】
単一のFIFOを備え、前記エンコーダは、エンコードされたデータストリームを、FIFOへ書き込む前に、インターリーブするための手段を備え、そして前記デコーダは、FIFOから読み取ったデータストリームをデインターリーブするための手段を備えた、請求項9ないし13のいずれかに記載の装置。
【請求項15】
前記エンコーダは、可変長さコード化機構を使用して、同程度の確率の見込みがあるか又は存在する見込みが少ない各記号を表わすデータビットの部分をエンコードするための手段を備えた、請求項9ないし14のいずれかに記載の装置。
【請求項16】
第1のデコードされたデータをエンコーディングするための複数のエンコーダと、ラウンドロビン形態でエンコーダに記号を付与するための手段と、エンコードされたデータをデコーディングするための対応する複数のデコーダとを備え、各デコーダは、デコードされた記号を順次発生するように構成される、請求項9から15のいずれかに記載の装置。

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


【公開番号】特開2012−80565(P2012−80565A)
【公開日】平成24年4月19日(2012.4.19)
【国際特許分類】
【出願番号】特願2011−257272(P2011−257272)
【出願日】平成23年11月25日(2011.11.25)
【分割の表示】特願2008−543901(P2008−543901)の分割
【原出願日】平成18年12月7日(2006.12.7)
【出願人】(501176037)イマジネイション テクノロジーズ リミテッド (59)
【Fターム(参考)】