(57)【特許請求の範囲】
【請求項１】
確率推定のための状態マシンを生成する方法であって、
ルックアップテーブル（ＬＵＴ）の状態に確率を割り当てるステップであって、所与の状態の番号をｉとし、かつ、適応レートが１より小さいとする場合に、前記状態の各状態ｉに対する確率を、ＬＰＳの最大確率に適応レートのｉ乗を乗算した値に等しくセットする処理を含むステップと、
ＭＰＳ及びＬＰＳを観察し、遷移れるべきＬＵＴの状態に対して状態遷移を発生するステップであって、ＭＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態が、当該現在の状態が最も高い状態でない場合には、当該現在の状態より高い次の状態であり、当該現在の状態が最も高い状態である場合には当該現在の状態であり、更に、複数の状態に対しＬＰＳが観察されたときに当該現在の状態から状態マシンが遷移する次の状態が、
現在の状態の番号＋ｌｏｇ（（現在の状態の確率＊適応レート＋（１−適応レート））／現在の状態の確率）／ｌｏｇ（適応レート）
の計算結果が丸められた値である、ステップと、
を含む方法。
【請求項２】
前記結果の丸められた値は、ＬＰＳが観察されて次の状態を発生するときに導入される丸めが平均で実質的にゼロとなるようになっている、請求項１に記載の方法。
【請求項３】
前記ＬＵＴは、各状態に関連付けられた複数の値を有し、該複数の値の各々は、予想されるインターバルレンジに前記状態に関連した確率を乗算した積に近似する、請求項１に記載の方法。
【請求項４】
状態に関連付けられた値は、配列における列のインデックスをｊとし、当該配列における列の数をＭとし、定数をＮとする場合に、Ｎ／（２＊Ｍ＊ｌｏｇ（（ｊ＋Ｍ＋１）／（ｊ＋Ｍ）））と状態に関連付けられた確率との積を整数に丸めることによって得られる、請求項３に記載の方法。
【請求項５】
前記複数の状態の少なくとも一つに対する前記複数の値の少なくとも一つは、所定値に切り取られる、請求項３に記載の方法。
【請求項６】
前記所定値は、ＭＰＳの符号化中に再正規化を多くて１回繰り返せるようにする、請求項５に記載の方法。
【請求項７】
前記ＬＵＴにおける状態の数は、６３であり、
前記適応レートは、０．５／０．０１８７５の１．０／６３乗であり、
ＬＰＳの最高確率は、０．５であり、
前記配列における列の数は、４であり、
前記配列の第１列における値は、Ｎ／４に切り取られる、
請求項４に記載の方法。
【請求項８】
前記定数Ｎは、５１２である、請求項７に記載の方法。
【請求項９】
イベントシーケンスの各イベントが個別の値を有する確率推定値を発生するための確率推定器と、
前記確率推定器に接続され、各イベント及び対応の確率推定値に応じて情報シーケンスのゼロ以上のビットを生成する符号化エンジンと、
を備え、
前記確率推定器は、前記各イベントに対応するコンテクスト情報に応じて、確率推定状態マシンを使用して前記確率推定値を発生し、
前記確率推定状態マシンは、
所与の状態の番号をｉとし、適応レートが１より小さい場合に、各状態ｉに対する確率を、ＬＰＳの最大確率に適応レートのｉ乗を乗算した値に等しくセットして、ルックアップテーブル（ＬＵＴ）の状態に確率を割り当て、
ＭＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態が、当該現在の状態が最も高い状態でない場合には当該現在の状態より高い次の状態となり、当該現在の状態が最も高い状態である場合には当該現在の状態となり、更に、複数の状態に対しＬＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態が、
現在の状態の番号＋ｌｏｇ（（現在の状態の確率＊適応レート＋（１−適応レート））／現在の状態の確率）／ｌｏｇ（適応レート）
の計算結果が丸められた値となるように、ＭＰＳ及びＬＰＳを観察して、遷移されるべきＬＵＴの状態に対して状態遷移を発生する
ことによって生成される、算術エンコーダ。
【請求項１０】
前記結果の丸められた値は、ＬＰＳが観察されて次の状態を発生するときに導入される丸めが平均で実質的にゼロとなるようになっている、請求項９に記載の算術エンコーダ。
【請求項１１】
前記ＬＵＴは、各算術エンコーダに関連付けられた複数の値を有し、該複数の値の各々は、予想されるインターバルレンジに、前記状態に関連した確率を乗算した積に近似する、請求項９に記載の算術エンコーダ。
【請求項１２】
状態に関連した値は、配列における列インデックスをｊとし、当該配列における列の数をＭとし、定数をＮとした場合、Ｎ／（２＊Ｍ＊ｌｏｇ（（ｊ＋Ｍ＋１）／（ｊ＋Ｍ）））と状態に関連付けられた確率との積を整数へと丸めることによって得られる、請求項１１に記載の算術エンコーダ。
【請求項１３】
前記複数の状態の少なくとも一つに対する前記複数の値の少なくとも一つは、ある数に切り取られる、請求項１１に記載の算術エンコーダ。
【請求項１４】
前記数は、ＭＰＳの符号化中に再正規化を多くて１回繰り返せるようにする、請求項１３に記載の算術エンコーダ。
【請求項１５】
前記ＬＵＴにおける状態の数は、６３であり、
前記適応レートは、０．５／０．０１８７５の１．０／６３乗であり、
ＬＰＳの最高確率は、０．５であり、
前記配列における列の数は、４であり、
前記配列の第１列における値は、Ｎ／４に切り取られる、
請求項１２に記載の算術エンコーダ。
【請求項１６】
前記定数Ｎは、５１２である、請求項１５に記載の算術エンコーダ。
【請求項１７】
イベントシーケンスのイベントが個別の値を有する確率推定値を生成する確率推定器と、
前記確率推定器に接続され、対応する確率推定値及び情報シーケンスに応じてイベントシーケンスのイベントを生成するための復号エンジンと、を備え、
前記確率推定器は、前記イベントシーケンスの前記イベントに対応するコンテクスト情報に応じて、確率推定状態マシンを使用して前記確率推定値を生成し、
前記確率推定状態マシンは、
所与の状態の番号をｉとし、適応レートが１より小さいとする場合に、各状態ｉに対する確率を、ＬＰＳの最大確率に適応レートのｉ乗を乗算した値に等しくセットして、ルックアップテーブル（ＬＵＴ）の状態に確率を割り当て、
ＭＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態が、当該現在の状態が最も高い状態でない場合には当該現在の状態より高い次の状態となり、当該現在の状態が最も高い状態である場合には当該現在の状態となり、更に、複数の状態に対しＬＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態が、
現在の状態の番号＋ｌｏｇ（（現在の状態の確率＊適応レート＋（１−適応レート））／現在の状態の確率）／ｌｏｇ（適応レート）
の計算結果が丸められた値となるように、ＭＰＳ及びＬＰＳを観察して、遷移されるべきＬＵＴの状態に対する状態遷移を発生することによって生成される、算術デコーダ。
【請求項１８】
前記結果の丸められた値は、ＬＰＳが観察されて次の状態を発生するときに導入される丸めが平均で実質的にゼロとなるようになっている、請求項１７に記載の算術デコーダ。
【請求項１９】
前記ＬＵＴは、各算術エンコーダに関連付けられた複数の値を有し、該複数の値の各々は、予想されるインターバルレンジに、前記状態に関連付けられた確率を乗算した積に近似する、請求項１７に記載の算術デコーダ。
【請求項２０】
状態に関連した値は、配列における列インデックスをｊとし、配列における列の数をＭとし、定数をＮとすれば、Ｎ／（２＊Ｍ＊ｌｏｇ（（ｊ＋Ｍ＋１）／（ｊ＋Ｍ）））と状態に関連した確率との積を整数へと丸めることによって得られる、請求項１９に記載の算術デコーダ。
【請求項２１】
前記複数の状態の少なくとも一つに対する前記複数の値の少なくとも一つは、ある数に切り取られる、請求項１９に記載の算術デコーダ。
【請求項２２】
前記数は、ＭＰＳの符号化中に再正規化を多くて１回繰り返せるようにする、請求項２１に記載の算術デコーダ。
【請求項２３】
前記ＬＵＴにおける状態の数は、６３であり、
前記適応レートは、０．５／０．０１８７５の１．０／６３乗であり、
ＬＰＳの最高確率は、０．５であり、
前記配列における列の数は、４であり、
前記配列の第１列における値は、Ｎ／４に切り取られる、
請求項２０に記載の算術デコーダ。
【請求項２４】
前記定数Ｎは、５１２である、請求項２３に記載の算術デコーダ。
【請求項２５】
イベントシーケンスのイベントが個別の値を有する確率推定値を生成するステップであって、前記確率推定値は、前記イベントシーケンスの各イベントに対応するコンテクスト情報に応じて、確率推定状態マシンを使用して生成される、ステップと、
対応する確率推定値及び情報シーケンスに応答してイベントシーケンスのイベントを生成するステップと、を含み、
前記確率推定状態マシンは、
所与の状態の番号をｉとし、適応レートが１より小さいとする場合に、各状態ｉに対する確率を、ＬＰＳの最大確率に適応レートのｉ乗を乗算した値に等しくセットして、ルックアップテーブル（ＬＵＴ）の状態に確率を割り当て、
ＭＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態が、当該現在の状態が最も高い状態でない場合には当該現在の状態より高い次の状態となり、当該現在の状態が最も高い状態である場合には当該現在の状態となり、更に、複数の状態に対しＬＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態が、
現在の状態の番号＋ｌｏｇ（（現在の状態の確率＊適応レート＋（１−適応レート））／現在の状態の確率）／ｌｏｇ（適応レート）
の計算の結果が丸められた値になるように、ＭＰＳ及びＬＰＳを観察して遷移されるべきＬＵＴの状態に対する状態遷移を発生することによって、生成される、復号方法。
【発明の詳細な説明】
【版権について】
【０００１】
[0001]  この特許文書の開示の一部分は、版権保護を受ける資料を含む。版権所有者は、如何なる者が特許文書又は特許開示を特許商標庁の特許ファイル又は記録に残るように複写することに異議を唱えるものではないが、それ以外は、全ての版権権利が保護されるものとする。
【優先権】
【０００２】
[0002]  本特許出願は、２００２年９月２０日に出願された「TERMINATION OF ARITHMETIC CODING AND BYTE STUFFING」と題する対応の仮特許出願第６０／４１２，２４５号、及び２００２年１０月４日に出願された「CABAC CLEANUP AND COMPLEXITY REDUCTION」と題する仮特許出願第６０／４１５，０００号に対する優先権を主張する。
【技術分野】
【０００３】
[0003]  本発明は、広く、情報理論、ビデオ圧縮及び算術符号化に関する。より詳細には、本発明は、バイトスタフィング（byte stuffing)及び算術符号化の終了を行うと共に、算術符号化中に状態マシンを生成して使用する方法及び装置に関する。
【背景技術】
【０００４】
[0004]  データ圧縮は、大量のデータの記憶及び送信に非常に有用なツールである。例えば、文書のネットワーク送信のような画像の送信に必要な時間は、圧縮を用いて画像の復元に必要なビット数を減少させると、大幅に短縮される。
【０００５】
[0005]  先行技術には、多数の異なるデータ圧縮技術が存在する。圧縮技術は、非可逆符号化(lossy coding)及び可逆符号化(losslesscoding)の２つの広いカテゴリーに分類される。非可逆符号化とは、情報のロスを招く符号化であり、オリジナルデータの完全な再構成が保証されない。非可逆圧縮の目標は、オリジナルデータに対する変更を、それが支障のないように又は検出されないように行うことである。可逆圧縮では、完全な再構成が可能な方法でデータが圧縮され、全ての情報が維持される。
【０００６】
[0006]  算術符号化は、周知の圧縮技術であり、送信に必要なビット又はシンボルの数を削減するために幾つかのデータ符号化・圧縮システムに使用されている。算術エンコーダは、イベント（例えば、２進イベント）又はシンボルのシーケンスを含む入力を受信する。このエンコーダは、入力シーケンスを符号化して、対応のビット又はバイトシーケンスとする。ある場合には、エンコーダの入力に受信されたものより少数のデータビットをエンコーダの出力に発生させることによって、データを圧縮する。算術デコーダは、符号化データを受信し又はそれにアクセスすることができる。算術デコーダは、符号化データのシーケンスを読み取って、復号データを生成するが、これは、デコーダに受信された入力シンボルに一致しなければならない。圧縮は、符号化されているイベントに対して情報シーケンスに少数のビットを発生させることによって達成される。イベントと、符号化されている情報ビットとの比は、イベントの確率分布にもよるが、６４：１又は１２８：１にも達し得る。
【０００７】
[0007]  デコーダのオペレーションは、エンコーダのオペレーションと対称であることが好ましい。エンコーダとデコーダのオペレーションが対称であるならば、デコーダで読み取られる符号化データのビット数は、エンコーダによって生成された符号化ビットの数に一致する。
【０００８】
[0008]  ある算術デコーダでは、復号オペレーションを開始する際に、デコーダがビットのグループを先読みする。しかしながら、デコーダがビットのグループを先読みするので、不一致又は非対称性が生じ得る。
【０００９】
[0009]  この非対称性を補償するための従来の一解決策では、エンコーダにおいて符号化データに余分なビットを追加している。別の従来の解決策では、追加の符号化ビットを発生させず、デコーダにおいて、符号化データのビットストリームを先読みした後、後戻りさせている。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
[0010]  これら従来の解決策は、両者ともに、効率が悪い。符号化アルゴリズム及び復号アルゴリズムの複雑さを低減し、符号化、送信、及び復号を行うデータを減らし、更に、記憶の必要性を緩和するために、より効率の良い解決策が要望されている。
【課題を解決するための手段】
【００１１】
算術符号化及び／又は算術復号を実行する方法及び装置を開示する。一実施形態において、データ符号化方法は、イベントシーケンスにおける複数のイベントを符号化して、符号化データを生成するステップと、当該符号化データを用いてビットストリームを生成するとともに、当該符号化データの後のビットストリームにゼロ以上のスタフィングビットを追加することを含むステップとを備える。当該ゼロ以上のスタフィングビットは、符号化されたイベントの量と、符号化されているブロックの数と、ビットストリームにおけるビットの数との間の関係を実質的に維持するように機能する。
【００１２】
別の実施形態において、算術デコーダは、イベントシーケンスのイベントに対してコンテクスト識別子を生成するシーケンサと、ＬＰＳの値及びＬＰＳの確率推定値を決定する確率推定器と、ＬＰＳのレンジに値を割り当てるレンジレジスタを含む復号エンジンとを備えている。コンテクスト識別子がインデックスに等しくない場合に、当該値は、ＬＰＳの確率推定値と、レンジレジスタに記憶された値と、ＬＰＳのレンジへのコンテクスト識別子とに基づき、また、コンテクスト識別子がインデックスに等しい場合に、当該値は、レンジレジスタに記憶された値に基づかない。復号エンジンは、更に、ＬＰＳのレンジの値及び情報シーケンスからのビットに基づいて２進イベントの値を決定する。
【００１３】
他の実施形態において、確率推定のための状態マシンを生成する方法は、ルックアップテーブル（ＬＵＴ）の状態に確率を割り当てるステップを含み、このステップは、所与の状態の番号をｉとし、かつ、適応レートが１より小さいとする場合に、各状態ｉに対する確率を、適応レートのｉ乗が乗算されたＬＰＳの最大確率に等しくセットする処理を含む。この方法は、また、ＭＰＳ及びＬＰＳを観察して、遷移されるべきＬＵＴの状態に対する状態遷移を発生させるステップを備え、ＭＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態を、当該現在の状態が最も高い状態でない場合に現在の状態より高い次の状態とし、当該現在の状態が最も高い状態である場合に当該現在の状態とする。更に、複数の状態に対しＬＰＳが観察されたときに現在の状態から状態マシンが遷移する次の状態は、
現在の状態の番号＋ｌｏｇ（（現在状の態の確率＊適応レート＋（１−適応レート））／現在の状態の確率）／ｌｏｇ（適応レート）
の計算結果が丸められた値となる。
【００１４】
[0011]  本発明は、本発明の種々の実施形態を示す添付図面及び以下の詳細な説明から完全に理解されるであろうが、これは、本発明を特定の実施形態に限定するものではなく、本発明を例示し理解するためのものに過ぎない。
【図面の簡単な説明】
【００１５】
【図１】符号化及び復号システムの実施形態のブロック図である。
【図２】ビットストリームを生成するための符号化プロセスのフロー図である。
【図３】図１のシステムにおいて送信することのできる符号化データのデータフォーマットの一例を示す図である。
【図４】算術エンコーダの一実施形態のブロック図である。
【図５】イベントの符号化に関する一実施形態のフロー図である。
【図６】エンコーダ再正規化手順の一実施形態のフロー図である。
【図７】プットビット手順の実施形態を実行するプロセスの一実施形態を示す図である。
【図８】終了前にイベントを復号するプロセスの一実施形態を示すフロー図である。
【図９】終了時のフラッシュに係るプロセスの一実施形態を示すフロー図である。
【図１０】算術デコーダの一実施形態を示すブロック図である。
【図１１】算術デコーダの初期化プロセスの一実施形態を示すフロー図である。
【図１２】２進イベントを復号するプロセスの一実施形態を示すフロー図である。
【図１３】再正規化手順のフロー図である。
【図１４Ａ】同じ確率で２進イベントを復号するためのフロー図の一つである。
【図１４Ｂ】同じ確率で２進イベントを復号するためのフロー図の一つである。
【図１５Ａ】終了前にスライス終了フラグ又は他の２進イベントを復号する実施形態を示すフロー図の一つである。
【図１５Ｂ】終了前にスライス終了フラグ又は他の２進イベントを復号する実施形態を示すフロー図の一つである。
【図１６Ａ】確率推定ルックアップを実行するためのテーブルの一例である。
【図１６Ｂ】確率推定ルックアップを実行するためのテーブルの一例である。
【図１７】コンピュータシステムの一例を示すブロック図である。
【発明を実施するための形態】
【００１６】
[0029]  以下、情報、特にビデオデータを符号化及び復号する方法及び装置について説明する。符号化及び復号中に、算術符号化されているイベントの終了を知らせるために、インジケータ（例えば、スライスの終了）が使用される。一実施形態では、情報の符号化中に、エンコーダによって生成される符号化データのビットストリームに、数ビット又は数バイトのスタフィング情報が追加される。これら追加のビットを符号化データのビットストリームの中間にスタフィングするのではなく、スタフィングバイト（又はビット）を、符号化データの最後に追加する。このようなスタフィングを使用することによって、符号化されているイベントの数と、ビデオデータのブロック（例えばマクロブロック）の数と、生成されている情報シーケンスのサイズとの間の関係を維持することができる。
【００１７】
[0030]  以下、本発明をより完全に説明するために多数の細部について述べる。しかしながら、当業者であれば、これら特定の細部がなくとも本発明を実施できることが明らかであろう。他の例では、本発明を不明瞭にしないために、周知の構造及び装置を、詳述する代わりに、ブロック図形態で示す。
【００１８】
[0031]  以下の詳細な説明では、コンピュータメモリ内のデータビットに対する操作のアルゴリズム及び記号表示の形で記載している部分がある。これらのアルゴリズム記述及び表示は、データ処理分野の当業者によって、当該当業者の仕事の実体をその分野の他の当事者に最も効果的に伝達するために使用される手段である。アルゴリズムとは、ここにおいても、且つ一般においても、所望の結果を導く自己一貫性のあるステップのシーケンスであると考えられる。ステップとは、物理的な量の物理的な操作を要求するものである。必ずしもそうでないが、通常、これらの量は、記憶、転送、合成、比較、及びその他操作を行うことができる電気的又は磁気的信号の形態をとる。主として一般に使用される理由は、これらの信号を、ビット、値、エレメント、シンボル、キャラクタ、用語、番号等として参照することが時に便利であるとわかっているからである。
【００１９】
[0032]  しかしながら、これら及び同様の全ての用語は、適切な物理量に関連付けられており、これらの量に適用される単なる便利な表示に過ぎないことに留意されたい。以下の説明から明らかなように、特に指示のない限り、説明全体にわたり、「処理」又は「計算」又は「算出」又は「決定」或いは「表示」等の用語を用いた説明は、コンピュータシステムのレジスタ及びメモリ内の物理（電子）量として表わされたデータを、コンピュータシステムのメモリ又はレジスタ或いは他の情報記憶、送信又は表示装置内の物理的量として同様に表わされた他のデータへと操作及び変換するコンピュータシステム、又は同様の電子計算装置のアクション及びプロセスを指すことは理解されよう。
【００２０】
[0033]  また、本発明は、本明細書に記載されたオペレーションを実行する装置に関する。この装置は、要求された目的のために特別に構成されてもよく、又はコンピュータ内に記憶されたコンピュータプログラムによって選択的に起動され又は再構成される汎用コンピュータを備えてもよい。このようなコンピュータプログラムは、コンピュータ読み取り可能な記憶媒体、例えば、フロッピーディスク、光学的ディスク、ＣＤ−ＲＯＭ、磁気−光学ディスクを含む任意の形式のディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気又は光学カード、或いは電子的命令の記憶に適した任意の形式の媒体に記憶され得るが、これらに限定されない。これらは各々、コンピュータのシステムバスに接続される。
【００２１】
[0034]  本明細書に記載したアルゴリズム及び表示は、特定のコンピュータ又は他の装置に固有に関連するものではない。本明細書の教示に基づくプログラムと共に種々の汎用システムを使用することができ、また、要求の方法のステップを実行するための更に特殊な装置を構成することも便利であることは理解されよう。種々のこれらシステムに必要とされる構造は、以下の説明から明らかとなろう。更に、本発明を、特定のプログラミング言語を参照して説明していない。本明細書に記載された本発明の教示を実施するために、種々のプログラミング言語を使用できることは明らかであろう。
【００２２】
[0035]  マシン読み取り可能な媒体は、マシン（例えばコンピュータ）で読み取りできる形態で情報を記憶又は転送するためのメカニズムを含む。例えば、マシン読み取り可能な媒体は、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイス、電気的、光学的、音響的又は他の形態の伝播信号（例えば、搬送波、赤外線信号、デジタル信号等）、等々を含む。
【００２３】
＜符号化及び復号システムの概要＞
【００２４】
[0036]  図１は、符号化及び復号システム１００の実施形態のブロック図である。図１に示すように、システム１００は、チャンネル１２０を介して通信するエンコーダ１０２及びデコーダ１０４を備えている。これに代えて、システム１００は、エンコーダ１０２又はデコーダ１０４だけを備えてもよい。
【００２５】
[0037]  チャンネル１２０は、有線チャンネル、無線チャンネル又はそれらの組合せを含む相応のデータ通信チャンネルとすることができる。チャンネル１２０には、適当なデータ通信及び変調機構が使用される。システム１００の一例は、画像のシーケンスを含むビデオデータを符号化し、圧縮し、復号するためのシステムである。一実施形態では、各ピクチャーは、一つ以上のスライスに分割される。
【００２６】
[0038]  エンコーダ１０２は、入力データ（例えばビデオ情報）といった入力情報を受信する入力１０６を有する。一実施形態では、エンコーダ１０２は、算術符号化を使用してデータを符号化する。したがって、エンコーダ１０２は、データ記憶部、操作レジスタ、及び算術符号化エンジンを備えている。一実施形態では、エンコーダ１０２は、レンジレジスタ、即ちＲレジスタと、ロー(Low)レジスタ、即ちＬレジスタとを含む。更に、一実施形態では、エンコーダ１０２は、確率推定状態マシンを含む。エンコーダ１０２によって実行される符号化アルゴリズムは、当該技術において周知のコンテクスト適応二値算術符号化であり、本明細書ではＣＡＢＡＣと称している。また、本明細書に記載された技術及び構成を、他の符号化及び復号のアルゴリズム並びに手順に拡張することもできる。エンコーダ１０２は、符号化データをチャンネル１２０へ供給する出力１０８を有する。
【００２７】
[0039]  一実施形態において、エンコーダ１０２は、算術符号化データの終了を指示する符号化イベント（例えば、決定(decision)）を含む符号化データのビットストリームを生成する。一実施形態において、算術符号化データの終了を示すイベントは、スライス終了フラグを含む。また、ビットストリームは、より詳細には以下に述べるスタフィングバイト（又はビット）を含んでもよい。
【００２８】
[0040]  デコーダ１０４は、チャンネル１２０から符号化データを受信する入力１１０と、復号データを供給する出力１１２とを有する。一実施形態において、符号化データを復号するためのデコーダ１０４のオペレーションは、エンコーダ１０２の符号化のオペレーションと概ね対称である。尚、システム１００は、２つ以上のエンコーダ及び／又は２つ以上のデコーダを備えてもよい。
【００２９】
[0041]  エンコーダ１０２及びデコーダ１０４は、ビデオデータ、例えば、ビデオプロセッサ（例えばビデオコーデック）によって生成されたビデオデータの処理に使用される。一実施形態では、ビデオ画像は、記録され、当該記録された画像の１６×１６、８×８又は４×４のサンプルを表すデータのサンプルブロックに分割される。これらブロックは、次いで、ビデオプロセッサによって（例えば、離散コサイン変換を使用して）変換、量子化されて、サンプルブロックを表す整数値が得られる。これら整数値は、ビデオプロセッサによってイベント（例えば２進イベント）のシーケンスに変換され、エンコーダへ送られて、符号化される。或いは又、ビデオプロセッサは、個々のサンプルを直接操作してもよく、この操作は、サンプルを変換及び量子化し、サンプルに対する個別の量子化整数値をイベントシーケンスに変換する処理を含むものであってもよい。
【００３０】
[0042]  図２は、ビットストリームを生成するための符号化プロセスのフロー図である。このプロセスは、処理ロジックによって実行される。当該処理ロジックは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行されるソフトウェア）或いはその両方の組合せによって構成され得る。
【００３１】
[0043]  図２に示すように、この処理ロジックは、イベントシーケンス内のイベントを符号化して、符号化データを生成する（処理ブロック２０１）。イベントは、２進決定(binary decision)とすることができる。また、イベントは、同じスライスからのものであってもよい。一実施形態では、イベントの一つは、算術符号化の終了（例えば、スライスの終了）を指示する。次いで、処理ロジックは、全てのイベントに対する符号化データと、それに続くスタフィングバイト（又はビット）とをもつビットストリームを生成する（処理ロジック２０２）。このスタフィングバイト（又はビット）は、ビットストリームにおいて、算術符号化の終了を指示する符号化インジケータの後に入れられる。
【００３２】
[0044]  図３は、符号化データを、図１のシステムのようなシステムにおいて送信することのできる例示のデータフォーマット３００を示す。フォーマット３００は、ヘッダ３０２と、算術符号３０４と、一つ以上のストップビット３０６と、０，１又はそれより多くの整列ビット３０８と、０，１又はそれより多くのスタフィングバイト３１０とを含む。別の実施形態では、０，１又はそれ以上のスタフィングビットをバイトに代えて使用することができる。
【００３３】
[0045]  上述したように、図１のシステム及び図３のデータフォーマットを使用して、ピクチャーのシーケンスに関連するデータを含むビデオ情報の符号化及び送信を行うことができる。一実施形態では、ピクチャーが一つ以上のスライスに分割される。ここで、１スライスは、１６×１６ピクセルのアレーのマクロブロックを一つ以上含む。各スライスは、ピクチャー内の他のスライスと独立して符号化される。ピクチャーデータは、図３に示すフォーマットで符号化される。
【００３４】
[0046]  一実施形態では、ヘッダ３０２は、バイト境界で始まり、固定長符号又は可変長符号のいずれかを用いて符号化（例えば、ハフマン符号化）されたデータを含む。ヘッダ３０２は、スライスヘッダとすることができる。スライスヘッダの場合に、ヘッダ３０２の前に、スタートコード（ＳＣ）と、その次に続くスライスデータの形式を識別するインジケータとを設けることができる。
【００３５】
[0047]  算術符号３０４は、エンコーダ１０２（図１）のようなエンコーダの算術符号化エンジンによって生成されたビットのシーケンスである。一実施形態では、ビットのシーケンスがバイト境界でスタートする。一つ以上のストップビット３０３が、算術符号３０４に続く。別の実施形態では、ストップビット３０３が算術符号３０４に含まれてもよい。幾つかの（０から７）の後続の整列ビット３０８がストップビット３０６に続き、一実施形態では、スタフィングバイト３１０のバイト整列を保証する。データに追加されるスタフィングバイト３１０の数は、符号化されているイベントの数と、ビデオデータのブロック（例えばマクロブロック）の数と、生成された情報シーケンスのサイズとの間の関係を維持することに要するバイト数に基づいて、０バイト、１バイト又は２バイト以上にすることができる。
【００３６】
＜コードストリームの終了＞
【００３７】
[0048]  一実施形態では、エンコーダは、算術符号化データの終了をデコーダに指示するイベント（例えば決定）を符号化する。算術符号化データの終了は、スライスの終了に達したときに指示されてもよい。また、算術符号化データの終了は、ビットストリームにおける算術符号化データがストップし、その後に非算術符号化データが続くときにも発生させてもよい。
【００３８】
[0049]  図３に戻り、一実施形態では、スライス内の各マクロブロックに対して、算術符号２０４は、典型的には、以下のデータ、即ちマクロブロックモード、任意に動きベクトル及び変換係数、並びにｅｎｄ＿ｏｆ＿ｓｌｉｃｅ＿ｆｌａｇを含む。このｅｎｄ＿ｏｆ＿ｓｌｉｃｅ＿ｆｌａｇによって、デコーダ１０４（図１）がスライス内の最後のマクロブロックがいつ復号されたかを画定することが可能となる。このフラグが使用されるのは、算術符号の最終ビットが、２つ以上のマクロブロックを記述するデータを含む可能性があるからである。
【００３９】
[0050]  算術符号化データの終了を符号化することの利点は、従来の手法を検討することによって説明できる。従来の手法では、算術エンコーダの終了は、通常、２つの代案のうちの一方に基づいて行われる。第１のアプローチでは、そのままのレジスタＬが送信される。第２のアプローチでは、レジスタＬのコンテンツにオフセットが追加され、レジスタＬの最上位ビットだけが送信される。第１のアプローチの利点は、デコーダが、エンコーダによって生成されたものと同数のビットを正確に読み取ることである。しかしながら、これによって、余分なビットを送信するという損失がもたらされる。第２のアプローチでは、ビットは節約されるが、デコーダは、エンコーダによって生成されたものより多くのビットを読み取る。これは、デコーダでビットストリームにパディングを行うことによって克服することができる。
【００４０】
[0051]  本明細書に開示するアプローチは、両者の最良な点を供する。即ち、デコーダはエンコーダによって生成されたものと同数のビットを読み取り、エンコーダには必要以上のビットを送信させない。これは、イベント、即ちｅｎｄ＿ｏｆ＿ｓｌｉｃｅ＿ｆｌａｇを符号化して、スライスの終了を知らせることによって可能となっている。良好に定められた確率がこのイベントに割り付けられると、デコーダはそれを復号でき、当該イベントの結果が終了を知らせる場合に、デコーダは再正規化を先行することができる。即ち、通常、符号化中に、符号化される全てのシンボルについて、値Ｒに確率が乗算されて、サブインターバルが得られる。その後、再正規化が行われて、Ｒの値がある範囲の値に戻される。再正規化は、算術符号化の当業者に周知である。再正規化を先行することによって、読み取られるビットの数がエンコーダによって生成されるビットの数に一致することが保証される。
【００４１】
[0052]  一実施形態では、ｅｎｄ＿ｏｆ＿ｓｌｉｃｅイベント（又は算術符号化の終了を指示する他のイベント）に割り当てられる確率は、符号化の終了中にレジスタＲに割り当てられた数値によって、再正規化が実行される前に、定められる。一実施形態では、エンコーダとデコーダとが同期することを保証するために、スライス終了フラグに対して、サブインターバルの計算は、Ｒに記憶された値に確率を乗算することによって実行されない。代わりに、サブインターバルには、固定値、即ち定数が割り当てられる。一実施形態では、固定値２が使用される。より一般的には、ｅｎｄ＿ｏｆ＿ｓｌｉｃｅ＿ｆｌａｇを符号化する前に、この値は、レジスタＲのコンテンツの値とは独立していなければならない。これは、ビットストリームに入れられる最後のシンボル（ビット）のために行われる。サブインターバルを値２に設定することによって、デコーダのオペレーションに影響なく、値１をレジスタＬの値に加算することができる。これによって、ロー（Ｌ）レジスタ全体のコンテンツをビットストリームに送り込むことが可能となる。全レジスタＬのコンテンツが送信されるので、この例では再正規化が不要である。
【００４２】
[0053]  一実施形態では、レジスタＬの最下位ビットを１に設定して、Ｌのコンテンツを送信する。レジスタＬの最下位ビットを１に設定することは、その最下位ビットがゼロである場合にＬに１を加算することと等価である。したがって、算術エンコーダによって生成される最終ビットは１に等しく、算術符号を含むビットストリームの最終バイトは非ゼロの値を有する。結果において、レジスタＬの最下位ビットは、ストップビットとなる。
【００４３】
＜スタフィングバイトの追加＞
【００４４】
[0054]  一実施形態では、エンコーダは、圧縮されたデータのビットストリームにスタフィングバイト又はビットを挿入する。一実施形態では、スタフィングバイトは、スライスの算術符号の後に、ストップビット及び０、１又はそれ以上の整列ビットに続いて挿入される。整列ビットを挿入して、追加されるスタフィングバイトがバイト境界に挿入されることを保証する。ストップビットの後にスタフィングバイトを入れることの利点の一つは、デコーダがスタフィングバイトを復号する必要がないことである。したがって、デコーダは、エンコーダによって生成された符号化データのビット数と同数のビットを復号する。
【００４５】
[0055]  一実施形態では、圧縮されたビットストリームに挿入されるスタフィングバイトの数は、エンコーダに入力されるイベントの数と、データブロックの数と、エンコーダから出力されるビットの数との間の関係を維持することに基づいている。この関係を、より詳細に以下に説明する。
【００４６】
[0056]  一実施形態では、スタフィングバイトが特定のパターンを有している。このパターンは、ユニークであり、デコーダは、スタフィングバイトが存在することを、ストップビット及び一つ以上の整列ビットに続くこの特定パターンのビットを識別することによって、決定することができる。このような決定がなされると、デコーダは、スタフィングバイトを復号する必要がない。一実施形態では、デコーダは、デマルチプレクス機能を有しており、この機能は、ヘッダビット（ヘッダビットは復号エンジンへ送信されない）と同様に、スタフィングバイトがデコーダの算術復号エンジンへ送信されることを防止する。
【００４７】
[0057]  一実施形態では、スタフィングビットのパターンは、１６進表記で０００００３の３バイトシーケンスであり、当該バイトシーケンスがビットストリームに追加される。最初の２バイトは、ゼロワード（００００）となっており、第３バイト（０３）は、スライスの終了の後に、デコーダによって認識され、当該バイトがスタフィングバイトとして識別される。
【００４８】
[0058]  一実施形態では、スライスの終了に詰め込まれたスタフィングバイト３１０の数は、算術復号のオペレーション数とビット数との関係が４以下であることを保証する。図１のエンコーダ１０２のようなエンコーダは、レジスタＣを使用して、イベント（復号オペレーション）対ビット（又はバイト）の比をカウントし、さもなければ、追跡することができる。イベントが処理されるたびに、カウンタＣが１増加され、更に、ビットが生成されるたびに、カウンタＣが４（又はバイト生成のたびに３２）減らされる。一実施形態では、カウント処理は、ヘッダ及びそれに後続するストップ及び整列ビットを含むスライス（又は他のイベントセット）の全ビットを考慮に入れている。
【００４９】
[0059]  一実施形態では、ｅｎｄ＿ｏｆ＿ｓｌｉｃｅ＿ｆｌａｇに対する復号オペレーションは、カウンタＣによってカウントされない（代替の方法ではカウントされるが）ことに注意されたい。しかしながら、マクロブロック当たり一つのこのようなイベントがあり、このようなイベントの数は、ピクチャーサイズによって良好に制限されることが知られている。この場合、ｅｎｄ＿ｏｆ＿ｓｌｉｃｅ＿ｆｌａｇイベントをカウントしないことは、それらをカウントする（故に、マクロブロックごとに一度、Ｃを１増加する）が、同時に、２５６ピクセルごとに（マクロブロックごとに一度）Ｃを１減少させることと等価である。或いは又、マクロブロックごとにＣを任意の値だけ減少させることもできる。
【００５０】
[0060]  一実施形態では、本明細書に記載された手法でスタフィングバイトを追加すると、符号化されたスライスの最小長さが保証される。符号化されたスライスの中間にスタフィングビットを挿入する従来の技術に対し、この進歩によって、エンコーダがデータを符号化する規定、特に、どれほど多くのデータを符号化するかを定める規定が簡単になる。
【００５１】
[0061]  エンコーダは、イベントシーケンスにおけるイベントの数を、情報ビットのシーケンスにおける情報ビットの数と、イベントシーケンスで表わされた入力データのセグメント数、即ちブロック数との関数として制約する。例えば、この制約は、次のような線形結合の形態をとる。
ｅ≦αＢ＋βＳ
ここで、ｅは、情報ビット（又は他のエレメント）のシーケンスで表わされたイベントの数であり、Ｂは、情報ビット（又は他のエレメント）のシーケンスにおける情報ビットの数であり、Ｓは、イベントシーケンスで表わされたセグメント（例えばマクロブロック）の数である。また、α及びβは、カウンタへの減少値を表しており、生成される情報ビットの数及び処理されるセグメントの数に対するイベントシーケンスのイベント数の制約を実質的に維持する。
【００５２】
[0062]  α及びβの値は、通常、算術コーダのコントローラへ提供される。α及びβの導出について以下に説明する。αの値は、例えば、算術コーダにおいて情報ビットを生成する際のカウンタへの減少値を表わす。一方、βの値は、例えば、データブロックの処理が完了した際のカウンタへの減少値を表わす。別の形態では、当業者には明らかなように、値βを、セグメントの処理の開始時に又はデータブロックの処理中の他の任意の時間にカウンタ値から減少させてもよい。
【００５３】
[0063]  全ブロック数Ｓ及び値βは既知であるから、β×Ｓの積を、入力データのブロック（例えばマクロブロック）の処理後にイベントシーケンスのイベントの数ｅから減算してもよい。例えば、カウンタを使用して、生成されたビットの数に応じてイベントの数を制約する場合に、当該カウンタを、最初にβ×Ｓの値だけ減少させ、情報ビットが生成されるたびに値αだけ減少させ、一方、イベントシーケンスの各イベントがエントロピーエンコーダによって処理される度に、「１」だけ増加させる。
【００５４】
[0064]  βの値は、通常、１から１００までの範囲内の任意の値であることができ、例えば、以下に述べるように、決定される。αの値は、通常、１から１０までの範囲内の任意の値であり、例えば、以下に述べるように決定される。
【００５５】
[0065]  ある環境において、例えば、通信媒体が、情報シーケンスに与えられる情報ビットの数を制限する場合には、処理されるべき入力データのブロック数が前もって分からない。これは、例えば、情報シーケンスがインターネットプロトコル（ＩＰ）パケットとしてインターネットを経て送信されるものであって、このＩＰパケットが最大サイズ制限を有する場合に生じる。これらの環境では、個別の画像の複雑さに依存するが、一つ以上の情報ビットのシーケンスが、入力データの一画像を表わすために、必要となる。しかしながら、情報ビットのシーケンスの生成に使用されるブロックの数は、前もって分からない。その理由は、どれほど多くのセグメントを処理した後に情報ビットシーケンスの最大サイズに達するか分からないからである。処理されるべき入力データのセグメント数が前もって分からない場合には、コントローラは、個別のイベントシーケンスを表す一つ以上のブロックが符号化されるときに、イベントシーケンスを考慮する。例えば、カウンタを使用し、生成されたビットの数に応じてイベントの数を制約する場合には、当該カウンタを、各ブロックが処理されるたびに値βだけ減少させ、情報ビットが生成されるたびに値αだけ減少させ、一方、イベントシーケンスのイベントがエントロピーエンコーダによって処理される度に「１」だけ増加させる。
【００５６】
[0066]  α及びβの値は、エンコーダのシステム設計者が上述した一つ以上の制限を考慮することによって前もって決定されて、コントローラに与えられてもよい。これに代えて又はこれに加えて、α及びβの値は、上述した制限の一つ以上に基づいて、又はエンコーダのデフォルト値として、コントローラ、又はエンコーダの他の要素によって、決定されてもよい。コントローラが、規格又は復号装置によって課せられる制限の一つ又は両者を使用してα及びβの値を決定する場合に、一つ以上の当該制限に関する情報がコントローラのメモリ（図示せず）に記憶され、α及びβの値を決定する際にコントローラによって使用される。加えて又はこれに代えて、当該制限に関する情報は、例えば、外部メモリ（即ちデジタルビデオディスク（ＤＶＤ））や、ＤＶＤプレーヤ装置のような外部装置によって、或いは、例えば特定の入力データの符号化に関する幾つかの機能を取り扱うシステムエンジニアから、コントローラへ供給されてもよい。後者の場合に、システムエンジニアは、当業者には明らかなように、符号化規格及び／又は復号装置によって課せられる制限に関する情報をコンソール又は他の入力装置（図示せず）に入力することができ、又は、他の方法で指定することができる。
【００５７】
[0067]  更に、α及びβの値を決定する場合に、複雑さの制約が厳し過ぎるかどうか、例えば、α及び／又はβの値が低過ぎるかどうかを考慮してもよい。情報ビットシーケンスの終端に存在するスタフィング情報ビットの割合が高いこと（即ち、スタフィングバイト（又はビット）の数が情報シーケンスの情報ビットの約１％又は２％以上であること）は、その制約が厳し過ぎることを示す。当業者であれば、例えば、使用できる特定の規格及び／又はデコーダを考慮に入れて、他の割合がスタフィング情報ビットの高い割合を示してもよいことは明らかであろう。
【００５８】
[0068]  例えば、α及びβの値が制約を過度に厳しくすると決定された場合に、α及びβの値を高くして、スタフィングバイトが追加される見込みを低減する（即ち、符号化情報シーケンスにおけるクオリティペナルティの見込みを低減する）ことができる。α及びβの値を高くする場合には、符号化された情報シーケンスの復号に使用されるデコーダについて得られる複雑さの限界に対してその影響が考慮される。このような考慮は、デコーダを実施するためのコストを含むことができる。複雑さの限界が高い場合には、より大きな処理能力がデコーダに必要とされる。必要な処理能力の増加は、おそらく高い実施コストを招く。尚、一実施形態では、各マクロブロックからデータを符号化した後にα及びβの変更がなされてもよい。
【００５９】
[0069]  α及びβの値は、線形回帰技術を使用して実験的に決定することができる。各々がＳ個のセグメントを表すイベントシーケンスが、複雑さの制約を強いることなく、符号化されてもよい。イベントシーケンスｚごとに、イベント数ｅ（ｚ）に対し、生成される情報ビット数Ｂ（ｚ）が分かる。これは、線形回帰式、即ちデータ対（ｅ（ｚ）、Ｂ（ｚ））を近似する線ｅ＋ｃ＊Ｂ＋ｄを使用して決定することができる。したがって、線ｅ＝α＊β＋β＊Ｓの上に存在するデータ対（ｅ（ｚ）、Ｂ（ｚ））の数を減らし、潜在的にはそれを最小にするように、α及び／又はβの初期値を高くすることができる。
【００６０】
[0070]  上述した種々の技術の一つ以上によって決定されたα及びβの値を使用して、エンコーダは、生成される各情報ビットに対しαの値を考慮し（即ち、αの値だけカウンタを減少させ）、入力データのセグメントが完了した際にβの値を考慮する（即ち、βの値だけカウンタを減少させる）ことができる。例えば、α及びβが整数値である場合には、このような考慮（即ち、一つ以上のカウンタに対する減少）を直接行うことができる。
【００６１】
[0071]  例えば、α及びβの一方又は両方が分数値である場合には、共通の分母を決定して、α及びβの非分数値を与えることができる。この環境では、α及びβの新たな非分数値は、例えば、情報ビットの発生時及びセグメント処理の完了時に各々α及びβの値だけカウンタを減少させることによって、上述したように考慮される。決定された共通の分母は、例えば、イベントシーケンスにおける各イベントを処理する際に共通の分母の値をカウンタ値に加算することによって考慮される。例えば、α及びβの値が各々４／３及び２５と決定された場合には、共通の分母は、３と決定される。したがって、α及びβの非分数値は、共通の分母を使用して各々４及び７５と決定される。したがって、カウンタを使用してα及びβの値を考慮する場合には、カウンタを、情報ビットが発生されるたびに４だけ減少させ、各セグメントの処理が完了すると７５だけ減少させ、更に、イベントが処理されるたびに３だけ増加させる。
【００６２】
＜エンコーダのオペレーションの例＞
【００６３】
[0072]  図４は、算術エンコーダの一実施形態のブロック図である。図４に示すように、算術エンコーダ４００は、シーケンサ４０５と、確率推定器４１０と、符号化エンジン４１５とを備え、これらは互いに接続されている。一つ以上の入力データライン４２０は、エンコーダ４００にイベントシーケンス４２５（例えば、２進イベントの順序付けされたシーケンス）を受信するための入力ポートを備えている。イベントシーケンスは、エンコーダ４００によって、以下に述べるように処理されて、情報シーケンスを生成する。一実施形態では、この情報シーケンスは、順序付けされたシーケンスであり、少なくとも一つの情報エレメント（例えばビット）で構成されている。一実施形態では、情報シーケンスにおける情報ビットの数は、イベントシーケンスにおけるイベントの数より少ない。出力４３０は、エンコーダ４００から情報シーケンス４３５を送信するための出力ポートを備えている。この情報シーケンスの順序付けされたビットのシーケンスは、「０」又は「１」の値を有する一つ以上のビットを含む。
【００６４】
[0073]  イベントシーケンス４２５を受信すると、シーケンサ４０５は、確率推定器４１０及び符号化エンジン４１５の両者にイベント４２５を順次送信する。また、イベントシーケンス４２５の２進イベントごとに、シーケンサ４０５は、当該２進イベント用に確率推定器４１０へコンテクスト情報を送信する。確率推定器４１０は、受信したコンテクスト情報を使用して、確率推定値Ｐ（Ａ）を生成する。確率推定値Ｐ（Ａ）は、符号化エンジン４１５へ送信される。一実施形態において、確率推定器４１０は、多数の確率推定値を符号化エンジン４１５へ送信し、符号化エンジン４１５は、確率推定値の一つをＲ値に基づいて選択する。これに代えて、Ｒ値が確率推定器４１０へ送信され、確率推定器が当該Ｒ値を使用して、送信されるべき一つの確率推定値を選択してもよい。確率推定器４１０は、次いで、受信した２進イベントの値に基づいてその内部状態を更新する。符号化エンジン４１５は、受信した２進イベント及び対応の確率推定値Ｐ（Ａ）を使用して０以上の情報ビットを生成する。
【００６５】
[0074]  一実施形態において、符号化エンジン４１５は、算術符号化データの終了を指示するイベントを符号化する。このイベントは、スライス終了フラグであってもよく、又はビットストリームにおいて非算術符号化データが少なくとも続くという別のインジケータであってもよい。
【００６６】
[0075]  ゼロ以上の情報ビットを発生する際に、符号化エンジン４１５は、レンジレジスタ４６５、ローレジスタ４７０、ビットアウトスタンディングレジスタ４７５及びカウンタレジスタ４８０を含む種々のレジスタを使用する。算術符号化を実行するエンコーダ４００のオペレーションは、この技術分野では周知である。
【００６７】
[0076]  一実施形態では、エンコーダ４００は、情報ビットに対するイベントの関係を限定する。このことは、本明細書の他の部分で説明している。エンコーダ４００は、このオペレーションを、その一部分については、上述したようにスタフィングバイト（又はビット）を情報シーケンスに挿入することによって実行する。
【００６８】
[0077]  図５は、イベントの符号化に関する一実施形態のフロー図である。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行されるようなソフトウェア）或いはその両方の組合せで構成される処理ロジックによって実行される。算術符号化プロセスへの入力は、コンテクストを識別するコンテクストＩＤ、値Ｒ、Ｌ、及びｓｙｍＣｎｔを用いて復号される２進イベントであり、出力に書き込まれるのは、符号化によって生じたビットである。一実施形態では、符号化は、復号と対称であり、算術符号化エンジンの状態は、上述したように、サブインターバルの下端を指すＬの値と、サブインターバルの対応レンジを特定するＲの値とで表わされる。
【００６９】
[0078]  一実施形態では、符号化プロセスは、符号化エンジンが初期化された後にのみ呼び出される。一実施形態では、初期化は、ゼロに等しいＬの値及び０ｘ０１ＦＥに等しいＲの値を送信し、第１ビットフラグを１に、ビットアウトスタンディング（ＢＯ）値及びｓｙｍＣｎｔ（Ｃ）カウンタを０にセットすることによって実行される。第１ビットフラグは、符号化中に、エンコーダが初めてプットビット(put bit)手順に入るときを指示するために使用される。ｓｙｍＣｎｔカウンタは、符号化されるイベントの数を指示する値を記憶する。
【００７０】
[0079]  図５を参照する。このプロセスは、値ＲＬＰＳを次のように導出することによって（処理ブロック５０１）、単一イベント（例えばビット）の符号化を開始する。一実施形態では、処理ロジックは、Ｒインデックス（即ちＲｉｄｘ）を、Ｒの値を右へ６位置シフトして数値３Ｈｅｘとアンドした値に等しくすることによって、変数ＲＬＰＳを導出する。次いで、処理ロジックは、ＲＬＰＳの値を、Ｒｉｄｘの値と、コンテクストに関連付けられている現在のコンテクストに対する状態の値とを使用し、図１６Ａに示すテーブルのような確率推定状態マシンテーブルにアクセスすることによって決定される値に、等しくする。Ｒの値は、次いで、現在のＲ値からＲＬＰＳを引いたものにセットされる。
【００７１】
[0080]  ＭＰＳカウントに対するサブレンジインターバルを計算した後に、処理ロジックは、符号化されている２進イベントの値がＭＰＳの値に等しくないかどうかテストする（処理ブロック５０２）。２進イベントの値がＭＰＳに等しい場合には、処理ロジックは、ＭＰＳパスをとって処理ブロック５０３へ移行し、そこで、処理ロジックは、状態マシンを、図１６Ｂのテーブルを使用して、そのコンテクストに対して状態マシンに指示された次の状態へと更新し、次いで、プロセスが処理ブロック５０８へ移行する。符号化されている２進イベントがＭＰＳの値に等しくないと判断すると、処理ロジックは、ＬＰＳパスをとって処理ブロック５０４へ移行し、そこで、処理ロジックは、Ｌの値を、Ｌの値とＲの値の和に等しくセットし、次いで、Ｒの値を、ＲＬＰＳの値に等しくする。
【００７２】
[0081]  その後、処理ロジックは、特定のコンテクストに対する状態がゼロに等しくないかどうか決定する（処理ブロック５０５）。一実施形態では、状態ゼロは、５０／５０の確率に対応する状態である。或いは又、状態ゼロは、例えば、５０／５０の確率に近い別の確率に対応する状態である。コンテクストの状態がゼロに等しくない場合には、処理ロジックは、処理ブロック５０７へ移行する。コンテクストの状態がゼロに等しい場合には、処理ロジックは、ＭＰＳの意味を切り換え（処理ブロック５０６）、次いで、処理ブロック５０７へ移行し、ここで、処理ロジックは、コンテクストの状態番号を、図１６Ｂのテーブルを使用して次の状態へ更新する（処理ブロック５０７）。
【００７３】
[0082]  処理ブロック５０７及び５０３を実行した後に、プロセスは、処理ブロック５０８へ移行し、そこで、処理ロジックは、図６に示す再正規化のような再正規化手順を実行する。次いで、処理ロジックは、イベントカウンタの値を１だけ増加し（処理ブロック５０９）、処理を終了する。
【００７４】
[0083]  図６は、エンコーダの再正規化手順の一実施形態のフロー図である。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【００７５】
[0084]  次に、図６を参照する。まず、処理ロジックは、Ｒの値が１００Ｈｅｘ未満であるかどうかテストする（処理ブロック６０１）。Ｎｏの場合、プロセスは終了となる。Ｙｅｓの場合、プロセスは、処理ブロック６０２へ移行し、そこで、処理ロジックは、Ｌの値が１００Ｈｅｘ未満であるかどうかテストする。Ｙｅｓの場合、処理ブロックは、処理ブロック６０３へ移行し、そこで、プットビット手順がパラメータ０で実行され、その後、プロセスは、処理ブロック６０８へ移行する。処理ロジックは、Ｌの値が１００Ｈｅｘ以上であると判断すると、Ｌの値が２００Ｈｅｘより大きいかどうかテストする。Ｎｏの場合、処理ロジックは、Ｌの値から１００Ｈｅｘを減算した値にＬの値をセットし、ビットアウトスタンディング（ＢＯ）の値を、パラメータ１で１だけ増加する（処理ブロック６０５）。次いで、プロセスは、処理ブロック６０８へ移行する。Ｌの値が２００Ｈｅｘ以上である場合には、プロセスは、処理ブロック６０６へ移行し、そこで、処理ロジックは、Ｌの値を、Ｌの値から２００Ｈｅｘを減算した値にセットし、プットビット手順を実行し（処理ブロック６０７）、次いで、処理ブロック６０８へ移行する。
【００７６】
[0085]  処理ブロック６０８では、処理ロジックがＲの値を左へ１位置シフトし、且つＬの値を１位置シフトする。その後、プロセスは、処理ブロック６０１へ移行し、プロセスが繰り返される。
【００７７】
[0086]  図７は、プットビット手順の実施形態を実行するプロセスの一実施形態を示す。プットビット手順は、ゼロ以上のビットをビットストリームに書き込む。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【００７８】
[0087]  図７に示すように、処理ロジックは、最初に、第１ビットフラグがゼロに等しくないかどうかチェックする（処理ブロック７０１）。第１ビットフラグが１にセットされている場合には、処理ロジックは、第１ビットフラグをゼロに等しくセットする（処理ブロック７０２）。次いで、プロセスは、処理ブロック７０４へ移行する。Ｎｏの場合、処理ロジックは、値Ｂをもつビットを送信し（処理ブロック７０３）、次いで、処理ロジックが、処理ブロック７０４へ移行する。
【００７９】
[0088]  処理ブロック７０４において、処理ロジックは、ビットアウトスタンディング（ＢＯ）の値がゼロより大きいかどうかテストする。Ｎｏの場合、プロセスは終了となる。Ｙｅｓの場合、処理ロジックは、値１−Ｂをもつビットを送信し、ＢＯの値を１だけ減少させる（処理ブロック７０５）。その後、処理ロジックが、処理ブロック７０４へと移行する。
【００８０】
[0089]  図８は、終了前にイベントを符号化するプロセスの一実施形態を示すフロー図である。このプロセスは、スライスの終了と、算術符号化の終了を知らせる他の２進イベントとの符号化に使用される。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【００８１】
[0090]  図８に示すように、処理ロジックは、最初にＲの値を２だけ減少させる（処理ブロック８０１）。次いで、処理ロジックは、符号化されている２進イベントの値がゼロに等しくないかどうかテストする（処理ブロック８０２）。イベントがゼロに等しい場合には、処理ロジックは、図６に示したような再正規化手順を実行し（処理ブロック８０３）、次いで、プロセスは、処理ブロック８０６へ移行する。符号化されるべき２進イベントの値がゼロに等しくない場合には、処理ロジックは、Ｌの値を、Ｌの値とＲの値の加算値にセットし（処理ブロック８０４）、エンコーダフラッシング手順を実行し（処理ブロック８０５）、次いで、処理ブロック８０６へ移行する。処理ブロック８０６では、処理ロジックが、イベントカウンタの値を１だけ増加し、符号化プロセスが終了する。
【００８２】
[0091]  上記プロセスにおいて明らかなように、一実施形態では、２進イベントの値が１に等しい場合に、算術符号化が終了となり、イベントを符号化した後にフラッシング手順が適用される。このようなイベントを符号化すると、書き込まれる最後のビットは、１に等しいストップビットを含む。
【００８３】
[0092]  図９は、終了時のフラッシュに係るプロセスの一実施形態を示すフロー図である。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【００８４】
[0093]  図９に沿って説明する。処理ロジックは、最初に、Ｒの値を２にセットする（処理ブロック９０１）。処理ロジックは、次いで、図６に示した再正規化手順のような再正規化手順を実行する（処理ブロック９０２）。処理ロジックは、次いで、Ｌの値を右に９位置シフトして、値１Ｈｅｘとアンドしたものに等しい値に対して図７に示すプットビット手順を実行する（処理ブロック９０３）。Ｌレジスタの値をシフトしたコンテンツに対してアンドオペレーションを実行した結果は、１０番目のビット位置（最下位ビットから数えて）にビットを生成させ、その後、プットビット手順を使用して出力される。
【００８５】
[0094]  最終的に、処理ロジックは、Ｌレジスタの値を７位置右へシフトして、３Ｈｅｘの値とアンドし、次いで、１Ｈｅｘとオアしたものに等しい２つのビットを送信する（処理ブロック９０４）。１Ｈｅｘとのオアオペレーションは、ストップビットを追加するために実行される。
【００８６】
＜デコーダのオペレーションの例＞
【００８７】
[0095]  図１０は、算術デコーダ１０００の一実施形態を示すブロック図である。図１０に示すように、デコーダ１０００は、シーケンサ１００５と、確率推定器１０１０と、復号エンジン１０１５とを備え、これらは互いに接続されている。入力１０２０は、デコーダ１０００への情報シーケンス１０２５（例えば２進ビットの順序付けされたシーケンス）のためのポートを提供する。シーケンス１０２５の２進ビットは、「０」又は「１」の値を有する。一実施形態では、デコーダ１０００は、情報シーケンスを処理して、イベントシーケンス１０３５を生成する。生成されたイベントシーケンスは、単一ビット値以外の値を有する多数のイベント（例えば２進イベント）を含む順序付けされたイベントシーケンスである。このイベントシーケンスは、デコーダ１０００からの少なくとも一つの出力ポートを含む出力１０３０へ供給される。
【００８８】
[0096]  情報シーケンス１０２５を受信すると、シーケンサ１００５は、復号エンジン１０１５に一つ以上のビットを送信する。デコーダ１０００は、イベントシーケンスの一つ以上のイベントを次のように繰り返し生成する。シーケンサ１００５は、各イベントについて、対応のコンテクストを確率推定器１０１０に送信する。
【００８９】
[0097]  確率推定器１０１０は、受け取ったコンテクストの値に基づいて、対応の確率推定値Ｐ（Ａ）を発生する。この確率推定値Ｐ（Ａ）は、復号エンジン１０１５へ送信され、復号エンジン１０１５によってイベントの生成に使用される。一実施形態では、確率推定器１０１０は、多数の確率推定値を復号エンジン１０１５へ送信し、次いで、復号エンジン１０１５は、Ｒの値に基づいて確率推定値の一つを選択する。或いは又、Ｒの値が確率推定器１０１０へ送信され、確率推定器がこれを使用して、送信されるべき一つの確率推定値を選択してもよい。次いで、確率推定器１０１０は、復号エンジン１０１５から受け取った２進イベントの値に基づいてその内部状態を更新する。
【００９０】
[0098]  復号エンジン１０１５は、生成された各イベントを確率推定器１０１０及びシーケンサ１００５へ送信する。復号エンジン１０１５は、生成された各２進イベントに対してゼロ以上の情報ビットを消費する。したがって、シーケンサ１００５は、イベントの生成後に、情報シーケンスからのゼロ以上のビットを復号エンジン１０１５へ送信する。復号エンジン１０１５は、レンジレジスタ１０６５や値レジスタ１０７０を含む種々のレジスタを使用して、イベントシーケンス１０３５のイベントを生成する。デコーダ１０００のオペレーションは、以下に説明するフロー図に示されている。
【００９１】
[0099]  以下のフロー図は、デコーダ１０００のようなデコーダの一実施形態によってスライスに対して実行される復号オペレーションを示している。一実施形態において、デコーダは、図１２、１４Ａ、１４Ｂ、１５Ａ又は１５Ｂに示されたフロー図に従い、コンテクストの値に基づいて復号を実行する。図示されたプロセスは、他のプロセスに組み込まれてもよく、それに具体化された改善の利益を得るように他の方法で適用、或いは変更されてもよい。一実施形態では、デコーダは、一度に１バイトを読み取る。別の実施形態では、デコーダは、一度に１ビットを読み取る。
【００９２】
[0100]  図１１は、算術デコーダの初期化プロセスの一実施形態を示すフロー図である。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【００９３】
[0101]  図１１を参照する。まず、プロセスは、処理ロジックがレンジＲを所定の数値にセットすることで始まる（処理ブロック１１０１）。一実施形態において、当該所定の数値は、０ｘｆｆ００である。レンジＲを初期化した後、処理ロジックは、圧縮されたデータの２バイトをレジスタＶへ読み込む（処理ブロック１１０２）。一実施形態では、レジスタＶは、圧縮されたビットを一度に１バイト記憶する。レジスタＶは、圧縮されたデータを一度に１ビット記憶するように実施されてもよいが、本明細書に記載されたプロセスに使用される定数が、それに応じて変更されなければならない。
【００９４】
[0102]  より詳細には、図示されたように、処理ロジックは、１バイトを読み込み、それを左に８位置シフトし、次いで、別のバイトを取得し、それを算術オアオペレーションを用いてレジスタＶへ加算する。圧縮されたデータがレジスタＶに読み込まれると、処理ロジックは、レジスタＢの値を所定値にセットする。レジスタＢは、処理に使用できるレジスタＶ内の余りのビット数を指示する。レジスタＢの値が０未満になると、圧縮されたデータの別のバイトをフェッチすることが必要となる。一実施形態では、所定値は７である。
【００９５】
[0103]  図１２は、２進イベントを復号するプロセスの一実施形態を示すフロー図である。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【００９６】
[0104]  図１２に示すように、このプロセスは、ＬＰＳのインターバルのサイズを計算することによって開始する（処理ブロック１２０２）。一実施形態において、この計算は、乗算によって実行される。乗算は、コンテクスト（ＣＴＸ）に関連付けられた状態に基づくテーブルルックアップを使用することによって近似される。一実施形態では、有限状態マシンを使用して、マシンの状態に依存している確率が何であるかを指示する。次いで、ルックアップするのは、状態の値と、Ｒの最上位ビット後の次の２つの最上位ビットである。ルックアップを実行するテーブルの例を図１６Ａに示す。また、テーブルを生成する方法の例を以下に示す。
【００９７】
[0105]  テーブルルックアップの結果は、７シフトされる。その理由は、この手法では、一度にビットではなくバイトが読み取られるからである。テーブルルックアップのシフトされた結果は、ＬＰＳのサブレンジインターバルであり、ＲＬＰＳと称される。
【００９８】
[0106]  また、処理ブロック１２０２の一部分として、処理ロジックは、ＬＰＳのサブレンジインターバルＲＬＰＳをレジスタＲの値から減算することによって、ＭＰＳのサブインターバルレンジを計算する。処理ロジックは、Ｒの値を減算の結果に等しくセットする。
【００９９】
[0107]  ＭＰＳのサブレンジインターバルを計算した後に、処理ロジックは、レジスタＶの値が、レジスタＲに記憶されたＭＰＳのサブインターバル以上であるかどうかテストし、処理されている現在のビットがＬＰＳのサブレンジ内であることを指示する（処理ブロック１２０３）。Ｎｏの場合、処理ロジックは、ＭＰＳパスをとって処理ブロック１２０４へ移行し、そこで、処理ロジックは、復号される値（即ち戻される結果）Ｓを、その特定のコンテクストに対するＭＰＳであると定義された値に等しくセットする。次いで、処理ロジックは、当該コンテクストに対する状態マシンを、図１６Ｂのテーブルを使用して当該コンテクストに対して状態マシンに指示された次の状態へと更新する。一実施形態では、ＭＰＳに対し、状態マシンの更新は、状態テーブルの状態を１だけ増加することからなる。
【０１００】
[0108]  処理ロジックは、値ＶがレジスタＲの値以上であると判断すると、ＬＰＳ経路をとって処理ブロック１２０５へ移行し、そこで、結果Ｓを、特定のコンテクストＣＴＸに対するＬＰＳ（ＭＰＳではない）に等しくセットし、値Ｖを、Ｖの現在値からレンジＲの値を減算した結果に等しくセットし、更に、レンジＲを、ＬＰＳのレンジ、即ちＲＬＰＳに等しくセットする（処理ブロック１２０５）。
【０１０１】
[0109]  また、処理ロジックは、２進イベントのコンテクストに対する状態がゼロであるかどうかもチェックする（処理ブロック１２０６）。一実施形態では、状態０は、５０／５０の確率に対応する状態である。或いは又、状態ゼロは、例えば、５０／５０の確率に近い別の確率に対応する状態であってもよい。２進イベントのコンテクストに対する状態がゼロでない場合に、プロセスは、処理ブロック１２０８へ移行する。２進イベントのコンテクストに対する状態がゼロである場合に、処理ロジックは、ＭＰＳの意味を切り換える（処理ブロック１２０７）。
【０１０２】
[0110]  その後、コンテクストの状態番号は、図１６Ｂのテーブルを使用して次の状態へ更新され（処理ブロック１２０８）、処理ロジックは、以下に詳細に述べる再正規化手順を実行する（処理ブロック１２０９）。
【０１０３】
[0111]  図１３は、再正規化手順のフロー図である。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【０１０４】
[0112]  図１３に示すように、プロセスは、Ｒが８０００Ｈｅｘ未満であるかどうか処理ロジックがテストすることによって開始する（処理ブロック１３０１）。Ｒが８０００Ｈｅｘ以上である場合には、再正規化プロセスが終了となる。Ｙｅｓの場合、処理ロジックは、Ｒ及びＶの値を２倍にする（処理ブロック１３０２）。一実施形態では、処理ロジックは、Ｒ及びＶのビットを左へ１位置シフトすることによってＲ及びＶの値を２倍にする。また、Ｂの値は、１だけ減少される。その理由は、シフト処理によって処理に利用可能なビットが一つ少なくなるからである。次いで、処理ロジックは、Ｂの値が０未満であるかどうかチェックする（処理ブロック１３０３）。Ｎｏの場合、処理は処理ブロック１３０１へ移行し、プロセスが繰り返される。Ｂの値が０未満である場合には、処理が処理ブロック１３０４へ移行し、そこで、Ｂの値が７にセットされ、処理されるべき別のバイトがフェッチされて、レジスタＶの現在のコンテンツと論理オアされる。その後、処理は処理ブロック１３０１へ移行し、プロセスが繰り返される。
【０１０５】
[0113]  図１４Ａ及び１４Ｂは、同じ確率でイベントを復号するためのフロー図である。図１４Ａは、レジスタＶのサイズが１６ビットより大きいときに使用され、一方、図１４Ｂは、レジスタＶのサイズが１６ビットであるときに使用される。これらの手法は、一度に１バイトをフェッチするときに使用される。
【０１０６】
[0114]  これらのプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【０１０７】
[0115]  分布がゼロを中心とするものであって、正の値又は負の値を得る見込みがほぼ同じである場合に、これらのプロセスを使用できる。例えば、これらプロセスは、係数の符号値を処理するときに使用される。それが正であるか負であるかの見込みを推定するのではなく、固定推定値を使用して、確率が５０／５０であることを認識する。したがって、Ｒに確率を乗算するためのテーブルルックアップを実行する必要がない。尚、これらは、終了に影響しない。
【０１０８】
[0116]  図１４Ａを参照する。プロセスは、処理ロジックがＶの値を２倍にすると共にＢの値を１だけ減少させることによって開始する（処理ロジック１４０１）。Ｖの値を２倍にすることは、Ｖのビットを左へ１位置シフトすることで行われる。
【０１０９】
[0117]  次いで、処理ロジックは、Ｂの値が０未満であるかどうかチェックする（処理ブロック１４０２）。Ｎｏの場合、処理は、処理ブロック１４０４へ移行する。Ｂの値が０未満である場合には、処理ブロック１４０３へ移行し、そこで、Ｂの値が７にセットされ、処理されるべき別のバイトをフェッチされて、レジスタＶの現在のコンテンツと論理オアされる。
【０１１０】
[0118]  処理ブロック１４０４において、処理ロジックは、Ｖの値がＲの値以上であるかどうかテストする。Ｙｅｓの場合、処理ロジックは、結果Ｓを１にセットし、更に、Ｖの値を、Ｖの値からＲの値を減算した結果にセットし（処理ブロック１４０５）、プロセスが終了する。Ｎｏの場合、処理ロジックは、結果Ｓを０にセットし（処理ブロック１４０６）、プロセスは終了となる。
【０１１１】
[0119]  次に、図１４Ｂを参照する。処理ロジックが値Ｖ’をＶに等しくセットし、Ｖの値を２倍にし、Ｂの値を１だけ減少させることによって、プロセスが開始する（処理ロジック１４１１）。Ｖの値を２倍にすることは、Ｖのビットを左へ１位置シフトすることによって実行される。
【０１１２】
[0120]  次いで、処理ロジックは、Ｂの値が０未満であるかどうかチェックする（処理ブロック１４１２）。Ｎｏの場合、処理は、処理ブロック１４１４へ移行する。Ｂの値が０未満である場合には、処理ブロック１４１３へ移行し、そこで、Ｂの値が７にセットされ、処理されるべき別のバイトがフェッチされて、レジスタＶの現在のコンテンツと論理オアされる。
【０１１３】
[0121]  処理ブロック１４１４では、処理ロジックは、Ｖの値がＲの値以上であるかどうか、又はＶ’が８０００Ｈｅｘ以上であるかどうかテストする。Ｙｅｓの場合、処理ロジックは、結果Ｓを１にセットすると共に、Ｖの値を、Ｖの値からＲの値を減算した結果にセットし（処理ブロック９１５）、プロセスが終了する。Ｎｏの場合、処理ロジックは、結果Ｓを０にセットし（処理ブロック９１６）、プロセスは終了となる。
【０１１４】
[0122]  図１５Ａは、算術符号化の終了を示す符号化イベントを復号するための一実施形態を示すフロー図である。このようなイベントは、スライス終了フラグを構成する。スライス終了フラグについては、シンタックスを使用して、スライス終了フラグの存在をデコーダに指示することができる。一実施形態では、このプロセスは、各マクロブロックについて実行されるが、スライスにおける最後のマクロブロックについてのみ、スライスの終了を指示する結果が得られる（例えば、１の結果が出力される）。
【０１１５】
[0123]  算術符号化の終了を知らせるためのイベント（デコーダに対する）は、ビットストリームにおいて算術符号化の後に続こうとするデータが、非圧縮のものか又は算術符号化以外の別の符号化技術で圧縮されたものであるときに使用される。尚、この非圧縮のデータ又は非算術符号化技術で圧縮されたデータの後に、追加の算術符号化データが続いてもよい。したがって、終了を知らせるためのイベントは、非算術符号化データがビットストリームにおいて算術符号化データとインターリーブされる場合に使用される。
【０１１６】
[0124]  このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【０１１７】
[0125]  図１５Ａに沿って説明する。まず、処理ロジックは、Ｖの値が１００Ｈｅｘ未満であるかどうかテストし（処理ブロック１５０１）、それによって、スライスにおける最後のマクロブロックに到達したことを指示する。Ｖの値が１００Ｈｅｘ未満である場合に、処理ロジックは、復号されたシンボルを表わす結果Ｓを１にセットし（処理ブロック１５０２）、スライスに対する復号プロセスが終了する。Ｖの値が１００Ｈｅｘ未満でない場合に、処理ロジックは、出力結果Ｓを０にセットし、Ｒの値を、Ｒの値から１００Ｈｅｘを減算した結果にセットし、更に、Ｖの値を、Ｖの値から１００Ｈｅｘを減算した結果にセットする（処理ロジック１５０３）。次いで、処理ロジックが、図３の再正規化手順を実行して（処理ブロック１５０４）、プロセスが終了となる。
【０１１８】
[0126]  尚、一実施形態では、ＭＰＳとＬＰＳとの間の規定を切り換えてもよい。図１５Ｂは、ＭＰＳとＬＰＳとの間の規定を切り換えた場合に、終了前のイベントを符号化するプロセスの一実施形態を示すフロー図である。このプロセスは、ハードウェア（例えば、回路、専用ロジック等）、ソフトウェア（例えば、汎用コンピュータシステム又は専用マシンで実行される）或いはその両方の組合せで構成される処理ロジックによって実行される。
【０１１９】
[0127]  図１５Ｂに示すように、処理ロジックは、Ｒの値から１００Ｈｅｘを減算することで開始する（処理ブロック１５１１）。次いで、処理ロジックは、Ｖの値がＲの値以上であるかどうかテストする（処理ブロック１５１２）。Ｙｅｓの場合、処理ロジックは、復号されたシンボルを表わす出力結果Ｓを１にセットし（処理ブロック１５１３）、次いで、終了前のイベントを復号する復号プロセスが終了となる。したがって、再正規化は実行されない。Ｎｏの場合、処理ロジックは、出力結果Ｓを０にセットし（処理ブロック１５１４）、図１３の再正規化手順を実行し（処理ブロック１５１５）、次いで、プロセスは終りとなる。
【０１２０】
＜確率推定のための状態マシンの構造＞
[0128]  図１６Ａ及び１６Ｂにおける状態マシンを構成するためのプロセスの一例をＣコードで以下に示す。
C-code:
#define N b4
#define Pmax 0.5
#define Pmin 0.01875
#define regsize 9
#define ONE(1<<regsize)
double alpha;
double sum;
int i,j;
double q;
float prob64[N];
intnext_state_MPS_64[N];
intnext_state_LPS_64[N];
int switch_MPS_64[N];
int gLPS[N][4] ;
alpha=pow(Pmin/Pmax,1.0/(N-1));
sum=0.5;
for(i=0; i<N; i++){
prob64[i]=Pmax*pow(alpha,i);
next_state_MPS_64[i]=(i==N-1)?N-1:i+1;
q=prob64[i]*alpha+(1-alpha);
q=q/prob64[i];
q=-log(q)/log(alpha);
sum+=q;
k=(int)(sum);
sum-=k;
next_state_LPS_64[i]=(i-k<0)?O:i-k;
for(j=0; j<4; j++){
RTAB[i][j]=(int)(ONE/8*prob64[i]/log((j+5.0)/(j+4.0))+0.5);
if(j == 0 && RTAB[i][j] > ONE/4)
RTAB[i][j]=ONE/4;
}
}
【０１２１】
[0129]  上記コードにおいて、Ｎは、状態マシンにおける状態の数を定める。一実施形態において、状態マシンは対称的であり、合計状態数は、２＊Ｎ（この例では１２８）である。状態は、状態（０とＮ−１（それらも含めて）との間の数値）と、ＭＰＳフラグ（０又は１のいずれがＭＰＳであるかを決定する）との２つの変数で表わされる。
【０１２２】
[0130]  一実施形態では、大きな状態番号がＬＰＳの低確率に対応するように、状態が編成される。状態マシンは、以下の手順に近づくように定義される。
（ａ）ｐ(ＬＰＳ) <-- ｐ(ＬＰＳ)＊ａｌｐｈａ、ＭＰＳが観察される場合
（ｂ）ｐ(ＬＰＳ) <--ｐ(ＬＰＳ)＊ａｌｐｈａ＋(１−ａｌｐｈａ)、その他の場合
ここで、ａｌｐｈａは、適応レートを定める。ａｌｐｈａは、通常、０．９から１の範囲であるが、所望の適応に基づいて他の範囲内へ広がってもよく、又は他の範囲内にあってもよい。
【０１２３】
[0131]  上記コードにおいて、ａｌｐｈａは、ｐｏｗ（０．０１８７５／０．５、１．０／６３）に等しくセットされる。ここで、０．０１８７５（Ｐｍｉｎ）は、状態Ｎ−１に対するＬＰＳの確率を定義し、０．５（Ｐｍａｘ）は、状態０に対するＬＰＳの確率を定義し、更に、１．０／６３は、１割るＮ−１である。尚、ｐｏｗ（ａ、ｂ）は、数値ａのｂ乗である。
【０１２４】
[0132]  ｐｒｏｂ６４と称するアレーは、各状態に関連付けられたＬＰＳの確率を表わす浮動小数点値を含む。Ｐｒｏｂ６４［ｉ]は、Ｐｍａｘ＊ｐｏｗ（ａｌｐｈａ、ｉ）にセットされる。Ｐｒｏｂ６４［０］は、Ｐｍａｘに等しく、Ｐｒｏｂ６４［Ｎ−１］は、Ｐｍｉｎに等しい。
【０１２５】
[0133]  Ｎｅｘｔ＿ｓｔａｔｅ＿ＭＰＳ＿６４［ｉ］は、ＭＰＳが観察された際の状態遷移を定める。ｉがＮ−１と異なる場合には、状態が１だけ増加される。他の場合には、状態は不変に保たれる。Ｐｒｏｂ６４［ｉ］及びＮｅｘｔ＿ｓｔａｔｅ＿ＭＰＳ＿６４［ｉ］の組合せが与えられると、上述した更新手順の（ａ）の部分が上手く近似される。
【０１２６】
[0134]  更新手順の（ｂ）の部分を近似するために、Ｎｅｘｔ＿ｓｔａｔｅ＿ＬＰＳ＿６４［ｉ］をｉ−（−ｌｏｇ（（ｐｒｏｂ６４［ｉ］＊ａｌｐｈａ＋（１−ａｌｐｈａ））／ｐｒｏｂ６４［ｉ］）／ｌｏｇ（ａｌｐｈａ））にセットしなければならない。しかしながら、この値は、整数ではなく、したがって、整数近似を求めねばならない。一実施形態では、当該値は、最も近い整数に丸められる。しかしながら、別の実施形態では、丸め切り上げと丸め切り捨てとのバランスをとるために、丸めによって導入される差が平均でゼロに近づくように変数和が使用される。
【０１２７】
[0135]  ＲＴＡＢ［ｉ］［ｊ］の値は、Ｒ＊ｐｒｏｂ６４［ｊ］に近づくように計算される。変数ｊは、Ｒが存在するインターバルによって決定される。変数ｊは、Ｒが［２５６、３１９］の場合には０に等しくセットされ、［３２０、３８３］の場合には１に等しくセットされ、［３８４、４４７］の場合には２に等しくセットされ、更に、［４４８、５１１］の場合には３に等しくセットされる。ここで、例えば、（ＯＮＥ＊４）／８は、２５６に等しく、（ＯＮＥ＊５）／８−１は、３１９に等しく、等々である。（ＯＮＥ／８）ｌｏｇ（（ｊ＋５）／（ｊ＋４））は、ｊが与えられた場合のＲの期待値となっている。
【０１２８】
[0136]  より高速な実施を可能にするために、ＭＰＳを符号化する際には、再正規化の繰り返しを多くても１回しか行わないよう保証することが望ましい。このために、ＲＴＡＢ［ｉ］［０］は、ＯＮＥ／４に切り取られる。それ故、Ｒは、再正規化の前にＯＮＥ／４より小さくなることはない。より一般的には、一実施形態において、ＲＴＡＢ［ｉ］［ｊ］は、（ＯＮＥ／４）＋（ＯＮＥ／８）＊ｊに切り取られるが、ここに示す例ではｊが０と異なる場合はこのようにならない。
【０１２９】
[0137]  したがって、上述した技術を使用すると、一実施形態では一つの状態を除いて、図１６Ａ及び１６Ｂの状態テーブルを発生することができる。図１６Ａでは、状態６３は、２，２，２，２のＲ値を含む。図１６Ｂでは、いったん状態６３になると、次の状態も、状態６３である。したがって、ＬＰＳが発生するかＭＰＳが発生するかに拘らず、状態は変化しない。また、図１６Ｂでは、いったん状態６２になると、状態は、ＭＰＳ発生時に状態６２に留まる。
【０１３０】
＜ソースコードの実施例＞
【０１３１】
[0138]  Ｃコードでのサンプルエンコーダ及びサンプルデコーダを以下に示す。これらの方法は、データ（例えばビデオデータ）を符号化及び復号する適当な処理装置を使用して実装される。ある実施形態では、ハードウェア及びソフトウェア要素の組み合せによってプロセスが実行される。他の適応もなされる。符号化及び復号の機能はＣの形態で以下に示されている。
Encoder:
void start_encode() {
encode_slice_header();
while (!byte_aligned)
send_bit(0);
R=0x1fe;
L=O;
BO=0;
FB=1;
}
void finish_encode() {
R=2;
renorm_encode();
bit_plus_follow((L >> 9) & 1);
send_bit((L >> 8) & 1);
send_bit(1); // stop_bit
while (!byte_aligned())
send_bit(0); // alignment_bit
}
voidbit_plus_follow(int b) {
if (FB == 1)
FB = 0;
else
send_bit(b);
while (BO > 0) {
BO--;
send_bit(!b);
}
}
void encode_renorm() {
while (!(R&0x100) {
if (L+R < 0x200)
bit_plus_follow(0);
else if (L >= 0x200) {
bit_plus_follow(1);
L -= 0x200;
}
else {
BO++;
L -= 0x100;
}
R <<= 1;
L <<= 1;
}
}
void encode_event(intctx, int b) {
rLPS = table[state[ctx]][(R>>6)-4];
R -= rLPS;
if (b == MPS[state[ctx]])
state[ctx] = next_state_MPS[state[ctx]];
else {
L += R;
R = rLPS;
if (state[ctx] == 0)
MPS[state[ctx]] = !MPS[state[ctx]];
state[ctx] = next_state_LPS[state[ctx]];
}
encode_renorm();
}
voidencode_equiprob_event(int b) {
L <<= 1;
if (b)
L+=R;
if (L+R < 0x400)
bit_plus_follow(0);
else if (L >= 0x400) {
bit_plus_follow(1);
L -= 0x400;
}
else {
BO++;
L -= 0x200;
}
}
void encode_end_of_slice_flag(intb) {
if (b == O) {
R-=2;
L+=2;
encode_renorm();
}
}
Decoder (bytebased):
void start_decode() {
decode_slice_header();
while (!byte_aligned())
get_bit();
R = 0xff80;
V = get_byte() << 8;
V |= get_byte();
B = 7;
}
void finish_decode() {
while (more_bytes_in_slice())
get_byte(); // stuffing byte
}
void decode_renorm() {
while (R<0x8000) {
R <<= 1;
V <<= 1;
B--;
if (B<0) {
B= 7;
V |= get_byte();
}
}
}
int decode_equiprob() {
V = (V<<1);
B--;
if (B<0) {
V |= get_byte();
B = 7;
}
if (V >= R) {
V -= R;
bit = 1;
}
else
bit = 0;
return bit;
}
int decode_event(intctx) {
rLPS =table[state[ctx]][(R>>13)-4]<<7;
R -= rLPS;
if (V < R) {
state[ctx] = next_state_MPS[state[ctx]];
bit = MPS[state[ctx]];
}
else {
bit = !MPS[state[ctx]];
V -= R;
R = rLPS;
if (state[ctx] == 0)
MPS[state[ctx]] = !MPS[state[ctx]];
state[ctx] = next_state_LPS[state[ctx]];
}
decode_renorm();
return bit;
}
intdecode_end_of_slice_flag() {
if (V < 0x100)
bit = 1;
else {
bit = 0;
R-=0x100;
V-=0x100;
decode_renorm();
}
return bit;
}
Alternative byte-basedend of slice decoding for use when the MPS/LPS convention is switched（ＭＰＳ／ＬＰＳの規定が切り替えられるときに使用される、代替のバイトベースのスライス終了ラグの復号）
intdecode_end_of_slice_flag(){
R -= 0x100;
if (V >= R)
bit = 1;
else {
bit = 0
decode_renorm();
}
return bit;
}
Decoder (bit based):
void start_decode() {
decode_slice_header();
while (!byte_aligned())
get_bit();
R = 0x1fe;
V = 0;
for (i=0; i<9; i++)
V = (V<<1) | get_bit();
}
void finish_decode() {
while (!byte_aligned())
get_bit(); // alignement bit
while (more_bytes_in_slice())
get_byte(); // stuffing byte
}
int decode_renorm() {
while (R<0x100) {
R <<= 1;
V = (V<<1)|get_bit();
}
}
int decode_equiprob() {
V = (V<<1) | get_bit();
if (V >= R) {
V -=R;
bit = 1;
}
else
bit = 0;
return bit;
}
int decode_event(intctx) {
rLPS = table[state[ctx]][(R>>6)-4];
R -= rLPS;
if (V < R) {
state[ctx] = next_state_MPS[state[ctx]];
bit = MPS[state[ctx]];
}
else {
bit = !MPS[state[ctx]];
V -= R; R = rLPS;
if (state[ctx] == 0)
MPS[state[ctx]] = !MPS[state[ctx]];
state[ctx] = next_state_LPS[state[ctx]];
}
decode_renorm();
return bit;
}
intdecode_end_of_slice_flag() {
if (V < 2)
bit = 1;
else {
bit = 0;
R-=2;
V-=2;
decode_renorm();
}
return bit;
}
Alternative bit-basedend_of_slice flag decoding for use when the MPS/LPS convention is switched（ＭＰＳ／ＬＰＳの規定が切り替えられるときに使用される、代替のビットベースのスライス終了フラグの復号）
intdecode_end_of_slice_flag(){
R -= 2;
if (V >= R)
bit = 1
else {
bit = 0;
decode_renorm();
}
return bit;
}
【０１３２】
[0139]  尚、上述した算術コーダには、上部インターバル及び下部インターバルの２つに分割されるインターバルがある。一方のインターバルは、ＭＰＳを表わし、他方のインターバルは、ＬＰＳを表わす。一実施形態では、ＭＰＳ及びＬＰＳをインターバルに割り当てる処理は、一方のインターバルに１を割り当て、他方のインターバルに０を割り当てる処理を含む。上述したソースコードでは、ｅｎｄ＿ｏｆ＿ｓｌｉｃｅ＿ｆｌａｇを符号化するためにインターバルが分割される場合に、ＭＰＳ（値０）が上部サブインターバルに割り当てられる。また、ＭＰＳを下部サブインターバルに割り当てることもできる。
【０１３３】
[0140]  以下のコードは、別のエンコーダ例を示す。尚、このコードでは、Ｓは、上述したように制限する関係を満足するためのスライスにおける最小バイト数である。
void start_encode() {
send_NAL_first_byte();
encode_slice_header();
while (!byte_aligned())
send_bit(0);
R = 0x1fe; // range
L = 0; // low
BO = 0; // bits outstanding
C = 0; // event counter
FB = 1; // first bit flag
}
void finish_encode() {
bit_plus_follow((L >> 9) & 1);
for (i=8; i>=1; i--)
send_bit((L >> i) & 1);
send_bit(1); // stop_bit
while (!byte_aligned())
send_bit(0); // alignment bit
RBSP_to_EBSP();
S = min_bytes(C,number_of_macroblocks_in_slice);
while (S > bytes_in_NAL_unit())
send_three_bytes(Ox000003); // write bytesdirectly into 
NAL unit
}
voidbit_plus_follow(int b) {
if (FB == 1)
FB = 0;
else
send_bit(b);
while (BO > 0) {
BO--;
send_bit(!b);
}
}
void encode_renorm() {
while (!(R&0x100) {
if (L+R < 0x200)
bit_plus_follow(0);
else if (L >= 0x200) {
bit_plus_follow(1);
L -= 0x200;
}
else {
BO++;
L -= 0x100;
}
R <<= 1;
L <<= 1;
}
}
void encode_event(intctx, int b) {
rLPS = table[state[ctx]][(R>>6)-4];
R -= rLPS;
if (b == MPS[state[ctx]])
state[ctx] = next_state_MPS[state[ctx]];
else {
L += R;
R = rLPS;
if (state[ctx] == 0)
MPS[state[ctx]] = !MPS[state[ctx]];
state[ctx] = next_state_LPS[state[ctx]];
}
encode_renorm();
C++;
}
voidencode_equiprob_event(int b) {
L <<= 1;
if (b)
L += R;
if (L+R < 0x400)
bit_plus_follow(0);
else if (L >= 0x400) {
bit_plus_follow(1);
L -= 0x400;
}
else {
BO++;
L -= 0x200;
}
C++;
}
voidencode_end_of_slice_flag(int b) {
if (b == 0) {
R-=2;
L+=2;
encode_renorm();
}
}
【０１３４】
[0141]  上記コードにおいて、ヘッダの一部分である第１バイトをＮＡＬユニットに送信する処理は、後続するデータの形式を指示するために実行される。ＮＡＬユニット及びその使用法は、この技術分野では周知である。
【０１３５】
[0142]  ＲＢＳＰ＿ｔｏ＿ＥＢＳＰ（）の関数呼び出しは、データをビットストリームに挿入させる。より好ましくは、一実施形態において、ビットストリームに所定数の連続するゼロが発生するのを防止する方法として、０３Ｈｅｘが００００Ｈｅｘバイトの後に次のパターン、例えば、００００００、０００００１、０００００２、０００００３で挿入される。その結果、００００００Ｈｅｘ、０００００１Ｈｅｘ及び０００００２Ｈｅｘのパターンが圧縮されたデータに現われることがなく、これを再同期マーカーとして使用することができる。デコーダが０００００３Ｈｅｘパターンに遭遇すると、逆の手順によって「０３」がビットストリームから除去される。
【０１３６】
[0143]  本明細書に説明したエンコーダ及びデコーダのこのような一つの使い方は、ビデオデータを符号化及び復号するものであるが、当業者であれば、本明細書に説明したエンコーダ及びデコーダは、エンコーダの場合にイベントシーケンスが情報シーケンスへ圧縮され、デコーダの場合にその情報シーケンスが圧縮解除されるような任意の場面に使用できることが明らかであろう。更に、エンコーダの上記説明は、多数の２進イベントで構成されたイベントシーケンスを、少なくとも１ビットで構成された情報シーケンスへと処理することに関して述べ、デコーダについては、少なくとも１ビットで構成された情報シーケンスを、多数の２進イベントで構成されたイベントシーケンスへと処理することに関して述べたが、エンコーダ及びデコーダは、当業者に明らかなように、本明細書に説明した教示を利用して、Ｍ進(M-ary)性のイベント（即ち、各Ｍ進イベントは２ビット以上のデータを表わす）で構成されたイベントシーケンス及び情報シーケンスに対して演算を行うことができる。
【０１３７】
＜コンピュータシステムの例＞
【０１３８】
[0144]  図１７は、本明細書に説明された一つ以上のオペレーションを実行することのできるコンピュータシステムの一例を示すブロック図である。尚、これらのブロック又はブロックのサブセットは、本明細書に説明された技術を実行するように、例えば、セルラー電話のような装置に一体化できる。
【０１３９】
[0145]  図１７を参照すれば、コンピュータシステム１７００は、情報を通信するための通信メカニズム即ちバス１７１１と、情報を処理するためにこのバス１７１１に接続されたプロセッサ１７１２とを備えている。このプロセッサ１７１２は、例えば、Ｐｅｎｔｉｕｍ（登録商標）、ＰｏｗｅｒＰＣ（登録商標）、Ａｌｐｈａ（登録商標）等のマイクロプロセッサを含むが、これに限定されない。
【０１４０】
[0146]  システム１７００は、更に、プロセッサ１７１２によって実行される情報及び命令を記憶するためにバス１７１１に接続されたランダムアクセスメモリ（ＲＡＭ）又は他のダイナミック記憶装置１７０４を備えている。また、このメインメモリ１７０４は、プロセッサ１７１２によって命令を実行する間に一時的な変数又は他の中間情報を記憶するために使用されることができる。
【０１４１】
[0147]  また、コンピュータシステム１７００は、プロセッサ１７１２用のスタティック情報及び命令を記憶するためにバス１７１１に接続されたリードオンリメモリ（ＲＯＭ）及び／又は他のスタティック記憶装置１７０６と、磁気ディスク又は光学ディスク及びそれに対応するディスクドライブのようなデータ記憶装置１７０７とを備えている。このデータ記憶装置１７０７は、情報及び命令を記憶するためにバス１７１１に接続される。
【０１４２】
[0148]  コンピュータシステム１７００は、更に、コンピュータのユーザに情報を表示するためにバス１７１１に接続された陰極線管（ＣＲＴ）又は液晶ディスプレイ（ＬＣＤ）のようなディスプレイ装置１７２１にも接続される。また、アルファニューメリック及び他のキーを含むアルファニューメリック入力装置１７２２も、情報及びコマンドの選択をプロセッサ１７１２へ通信するためにバス１７１１に接続される。更に別のユーザ入力装置は、マウス、トラックボール、トラックパッド、スタイラス、又はカーソル方向キーのようなカーソル制御器１７２３であり、これは、方向情報及びコマンド選択をプロセッサ１７１２と送受すると共に、ディスプレイ１７２１上のカーソル移動を制御するためにバス１７１１に接続される。
【０１４３】
[0149]  バス１７１１に接続される別の装置は、ハードコピー装置１７２４である。ハードコピー装置１７２４は、命令、データ又は他の情報をペーパーやフィルムのような媒体や同様の形式の媒体にプリントするために使用される。更に、スピーカ及び／又はマイクロホンのような音声記録及び再生装置も、コンピュータシステム１７００と音声インターフェイスするようにバス１７１１に任意に接続できる。バス１７１１に接続できる別の装置は、電話、ハンドヘルド式の手のひら装置又は他の装置と通信するための有線／無線通信装置１７２５である。
【０１４４】
[0150]  尚、システム１７００のいずれか又は全部の要素及びそれに関連したハードウェアを本発明に適用できる。しかしながら、当該コンピュータシステムの他の構成は、上記デバイスの幾つか又は全てを含められることは明らかであろう。
【０１４５】
[0151]  当業者であれば、以上の説明を読んだ後、本発明の多数の変更や修正が明らかとなるであろうが、図示して説明した特定の実施形態は、本発明を限定するためのものではないことを理解されたい。それ故、種々の実施形態の詳細な説明は、本発明の本質とみなす特徴のみを記載した特許請求の範囲を何ら限定するものではない。
【符号の説明】
【０１４６】
１００…システム、１０２…エンコーダ、１０４…デコーダ、３００…データフォーマット、３０２…ヘッダ、３０３…ストップビット、３０４…算術符号、３０６…ストップビット、３０８…整列ビット、３１０…スタフィングバイト、４００…算術エンコーダ、４０５…シーケンサ、４１０…確率推定器、４１５…符号化エンジン、４６５…レンジレジスタ、４７０…ローレジスタ、４７５…ビットアウトスタンディングレジスタ、４８０…カウンタレジスタ、１０００…算術デコーダ、１００５…シーケンサ、１０１０…確率推定器、１０１５…復号エンジン、１０６５…レンジレジスタ、１０７０…値レジスタ、１７００…コンピュータシステム、１７０４…メインメモリ、１７０６…スタティック記憶装置、１７０７…データ記憶装置、１７１１…バス、１７１２…プロセッサ、１７２１…ディスプレイ装置、１７２２…アルファニューメリック入力装置、１７２３…カーソル制御器、１７２４…ハードコピー装置、１７２５…通信装置。
【図１】
0005390004.tif 000002
【図２】
0005390004.tif 000003
【図３】
0005390004.tif 000004
【図４】
0005390004.tif 000005
【図５】
0005390004.tif 000006
【図６】
0005390004.tif 000007
【図７】
0005390004.tif 000008
【図８】
0005390004.tif 000009
【図９】
0005390004.tif 000010
【図１０】
0005390004.tif 000011
【図１１】
0005390004.tif 000012
【図１２】
0005390004.tif 000013
【図１３】
0005390004.tif 000014
【図１４Ａ】
0005390004.tif 000015
【図１４Ｂ】
0005390004.tif 000016
【図１５Ａ】
0005390004.tif 000017
【図１５Ｂ】
0005390004.tif 000018
【図１６Ａ】
0005390004.tif 000019
【図１６Ｂ】
0005390004.tif 000020
【図１７】
0005390004.tif 000021