JP2007215145A - 符号器、復号器、プログラム及び情報記録媒体 - Google Patents
符号器、復号器、プログラム及び情報記録媒体 Download PDFInfo
- Publication number
- JP2007215145A JP2007215145A JP2006035788A JP2006035788A JP2007215145A JP 2007215145 A JP2007215145 A JP 2007215145A JP 2006035788 A JP2006035788 A JP 2006035788A JP 2006035788 A JP2006035788 A JP 2006035788A JP 2007215145 A JP2007215145 A JP 2007215145A
- Authority
- JP
- Japan
- Prior art keywords
- value
- shift
- register
- index value
- lps
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
【課題】MQ−Coder方式の符号器及び復号器における再正規化に係わる処理を高速化する。
【解決手段】確率推定テーブルに、Qe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数Shift_a値を追加する。復号器のLPSシンボル変更処理後の再正規化処理において、コンテクストのインデックス値に対応したShift_a値を確率推定テーブルより取得し、バイトカウンタCTの値が該Shift_a値以下ならばバイト入力処理3002を実行した後、該Shift_a値で示されるシフト回数だけA,Cレジスタを左ビットシフトし、該Shift_a値だけバイトカウンタCTをデクリメントする処理3003を実行する。このようなループの繰り返しのない再正規化処理はソフトウェアによっても高速に実行可能である。
【選択図】図20
【解決手段】確率推定テーブルに、Qe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数Shift_a値を追加する。復号器のLPSシンボル変更処理後の再正規化処理において、コンテクストのインデックス値に対応したShift_a値を確率推定テーブルより取得し、バイトカウンタCTの値が該Shift_a値以下ならばバイト入力処理3002を実行した後、該Shift_a値で示されるシフト回数だけA,Cレジスタを左ビットシフトし、該Shift_a値だけバイトカウンタCTをデクリメントする処理3003を実行する。このようなループの繰り返しのない再正規化処理はソフトウェアによっても高速に実行可能である。
【選択図】図20
Description
本発明は、MQ−Coder方式の符号器及び復号器に係り、特に、かかる符号器及び復号器における再正規化に係わる処理の高速化に関する。
算術符号化方式の一種であるMQ−Coderは、例えばJPEG2000におけるエントロピー符号化に採用されている(例えば[非特許文献1]参照)。
MQ−Coderにおいては、確率区間分割のための乗算を不要にし、かつ、有限長のレジスタを用いて高い演算精度を得られるようにするため、確率区間幅を0.75以上、1.5未満の範囲内に維持する再正規化(Renormalization)処理が行われる。
詳細は後述するが、この再正規化処理は、確率区間幅を保持するためのAレジスタや符号生成用のCレジスタを1ビットずつ左ビットシフトさせ、AレジスタのLSBから数えて16ビット目が”1”であるか確認する処理を繰り返すループを形成し、このループをAレジスタの16ビット目が”1”になるまで、すなわちAレジスタの値が16進数”0x8000”(十進数0.75)以上になるまで繰り返す処理であったため、処理に時間がかかった。特に、ソフトウェアによりMQ−Coder方式の符号器又は復号器を実現する場合、ループ制御のオーバーヘッドが大きいため再正規化処理の高速化が難しい。
このような再正規化処理の高速化に関する従来技術の例が特許文献1に記載されている。この従来技術においては、再正規化処理のループの入り口で、Aレジスタの各ビット値をMSB側から走査して最初に1が検出したビット位置によって再正規化に必要なAレジスタの左ビットシフト回数を求める処理を行い、その回数分だけAレジスタ及びCレジスタの左ビットシフトを一気に行う。
しかし、上記特許文献1に記載の従来技術では、依然として再正規化のためのループの繰り返しが残るため、ソフトウェアによりMQ−Coder方式の符号器又は復号器を実現する場合に再正規化処理が高速化の大きなネックとなっていた。
よって、本発明の目的は、ソフトウェアによりMQ−Coder方式の符号器及び復号器を実現する場合においても、再正規化に係わる処理の大幅な高速化を可能にすることにある。
請求項1記載の発明は、MQ−Coder方式の復号器であって、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値が、コンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする復号器である。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値が、コンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする復号器である。
請求項2記載の発明は、MQ−Coder方式の復号器であって、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理において、コンテクストのインデックス値に対応したQeLSP値をAレジスタに設定し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする復号器である。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理において、コンテクストのインデックス値に対応したQeLSP値をAレジスタに設定し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする復号器である。
請求項3の発明は、MQ−Coder方式の符号器であって、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、
LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする符号器である。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、
LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする符号器である。
請求項4記載の発明は、MQ−Coder方式の符号器であって、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をAレジスタに設定し、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする符号器である。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をAレジスタに設定し、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする符号器である。
請求項5記載の発明は、コンピュータをMQ−Coder方式の復号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させた後、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけAレジスタとCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させた後、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけAレジスタとCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
請求項6記載の発明は、コンピュータをMQ−Coder方式の復号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させ、この際にコンテクストのインデックス値に対応したQeLSP値をメモリより読み出させてAレジスタに設定させ、
LPSシンボル変更処理後に復号時再正規化処理を実行させ、この復号時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させる、
ことを特徴とするプログラムである。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させ、この際にコンテクストのインデックス値に対応したQeLSP値をメモリより読み出させてAレジスタに設定させ、
LPSシンボル変更処理後に復号時再正規化処理を実行させ、この復号時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させる、
ことを特徴とするプログラムである。
請求項7記載の発明は、コンピュータをMQ−Coder方式の符号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させた後、該読み出したShift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該読み出したShift_a値だけバイトカウンタCTをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させた後、該読み出したShift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該読み出したShift_a値だけバイトカウンタCTをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
請求項8記載の発明は、コンピュータをMQ−Coder方式の符号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をメモリより読み出させてAレジスタに設定させ、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をメモリより読み出させてAレジスタに設定させ、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
請求項9記載の発明は、請求項5,6,7又は8に記載の発明に係るプログラムが記録されたことを特徴とするコンピュータが読み取り可能な情報記録媒体である。
請求項1,2記載の発明は、LPSシンボル変更後の再正規化に係わる繰り返しループ処理を排除することにより復号器の高速化に大きく寄与するものである。また、請求項3,4記載の発明は、LPS符号化処理及びMPS符号化処理においてAレジスタへの設定操作が行われる場合に再正規化に係わる繰り返しループ処理を排除することにより符号器の高速化に大きく寄与するものである。請求項5,6,7,8記載の発明に係るプログラム又は請求項9記載の発明に係る情報記録媒体に記録されたプログラムをコンピュータにロードし実行させることにより、コンピュータを請求項1,2,3,4記載の発明に係る高速な復号器又は符号器として動作させることが可能になる、等々の効果を得られる。
まず、MQ−Coder方式の符号器及び復号器の構成について、本発明の理解に必要な限度で説明する。説明の便宜上、符号器及び復号器の構成を処理アルゴリズムの観点から説明するが、参照する各フローチャート中の各処理を符号器及び復号器の構成手段の機能と読み替え得ることは当然である。
[MQ−Coder方式の符号器の概要]
図1は符号器のデータ入出力を示す。図示のように、符号器に符号化の対象である2値シンボル(D)と、該シンボルに関するコンテクスト(CX)が入力し、符号器より符号が出力される。
図1は符号器のデータ入出力を示す。図示のように、符号器に符号化の対象である2値シンボル(D)と、該シンボルに関するコンテクスト(CX)が入力し、符号器より符号が出力される。
図2に符号器におけるAレジスタとCレジスタの構成を示す。AレジスタもCレジスタも16ビットの有効長を持つが、再正規化が生じた場合のCレジスタのオーバーフローを避けるため28ビット表現が用いられる。Aレジスタ内の”a”ビットは現在の確率区間幅の値を表す。Cレジスタ内の”x”ビットは符号レジスタであり、”s”ビットはキャリーオーバーに対処するためのスペーサビット、”b”ビットは完成した出力バイトをCレジスタから除去するビット位置、”c”はキャリービットを示す。
MQ−Coderでは、符号化時のシンボルの0と1の発生を実際に調べて確率推定を決定するのではなく、図3に示す確率推定テーブルのルックアップにより確率推定の決定を行う。この確率推定テーブルは、インデックス値、Qe値、NMPS、NLPS、SWITCHが格納されている。Qe値はLPSの発生確率、NMPSはMPS時に再正規化が起きた場合の次のインデックス値、NLPSはLPS時に再正規化が起きた場合の次のインデックス値、SWITCHはMPS,LPSシンボルの逆転スイッチである。
図4に符号器の全体的な処理フローを示す。最初に符号器の初期化処理1000が実行される。次に、1ビットのシンボル(D)とコンテクスト(CX)の取り込み処理1001、当該シンボルに関する符号化処理1002が繰り返される。最後のシンボルまで処理されると、終端処理であるFLUSH処理1003が実行される。換言すれば、符号器は上記各処理に対応した処理手段からなり、そして、それら各手段は後述するような内部処理のための手段から構成される。
なお、コンピュータ上で符号器を実現する場合、以上の各処理1000,1002,1004及び繰り返し制御処理1003をコンピュータに実行させるためのプログラム、換言すれば、各処理に対応した手段としてコンピュータを機能させるためのプログラムがコンピュータにロードされることになる。また、処理実行に関連したA,Cレジスタ、その他のレジスタ、カウンタ、バイトバッファ、ポインタ等としてコンピュータの汎用レジスタ又はメモリが利用される。
図5は初期化処理1000の内容を説明するためのフローチャートである。なお、図5に示されていないが、各コンテクスト(CX)に対するインデックス値(I(CX)と表記する)及びMPSシンボル(MPS(CX)と表記する)が、図6に示すようなデフォルト値に設定される。
まず、Aレジスタに初期値”0x800”(十進数の0.75)を設定し、Cレジスタに下限値0を設定し、バイトバッファのポインタBPをその開始位置BPSTより1だけ小さい値に設定し、バイトカウンタCTの値を12に設定する処理1101を実行する。次に、バイトバッファのBPの示す位置のバイトデータBが”0xFF”であるか判定する処理1102を行い、B=”0xFF”ならばバイトカウンタCTの値を13に設定する処理1103を行う。
図7は符号化処理1002の内容を説明するためのフローチャートである。まず、入力したシンボルDが”0”であるか判定する処理1201を実行し、判定結果がNoならば現在のコンテクストCXに対するMPS(CX)が”1”であるか判定する処理1202を行う。処理1202の判定結果がNoならばLPS符号化処理1204を、判定結果がYesならばMPS符号化処理1205を実行する。処理1201の判定結果がYesの場合、MPS(CX)が”0”であるか判定する処理1203を行い、その判定結果がNoならばLPS符号化処理1206を、判定結果がYesならばMPS符号化処理1207を実行する。ただし、LPS符号化処理1204と同1206は同一の処理であり、また、MPS符号化処理1205と同1207は同一の処理である。
図8はLPS符号化処理1204,1206の内容を説明するためのフローチャートである。まず現コンテクストCXのインデックス値I(CX)に対応したQe値(これをQe{I(CX)}と表す)を図3の確率推定テーブルより取得し、Aレジスタの現在の値から該Qe値を減算した値をAレジスタに設定する処理1301を行う。つまり、確率区間を現在のLPSの確率推定であるQe{I(CX)}を用いて分割する。そして、Aレジスタの値がQe{I(CX)}より小さいか判定する処理1302を行う。つまり、分割後のMPS副区間がLPS副区間より小さいかの判定を行う。その判定結果がNoならば、つまりMPS副区間がLPS副区間以上ならばAレジスタにQe{I(CX)}の値を設定する処理1303を行うが、判定結果がYesならば、つまりLPS副区間がMPS副区間より大きいならば、Cレジスタの現在の値にQe{I(CX)}を加算した値をCレジスタに設定する処理1304を行う。
次に、インデックス値I(CX)に対応したSWITCHを確率推定テーブルより読み出し、それが”1”であるか判定する処理1305を行い、判定結果がYesならばMPS(CX)を反転する処理1306を行う。次に、インデックス値I(CX)に対応したNLPS(これをNLPS{I(CX)}と表す)を読み出し、これを現在のコンテクストCXに対する新しいインデックス値I(CX)に設定する処理1307を行い、次に符号化時再正規化処理1308を実行する。このようにLPS符号化処理では常に再正規化処理が行われる。
図9はMPS符号化処理1205,1207の内容を説明するためのフローチャートである。まず、確率推定テーブルよりQe{I(CX)}を取得し、これをAレジスタの値から減算した値をAレジスタに設定する処理1401を行う。つぎにAレジスタの値が”0x8000”(十進数0.75)より小さいか判定する処理1402が行われる。具体的には、Aレジスタの値と”0x8000”との論理積がとられ、その結果が”0”であるか判定する。Aレジスタの値(確率区間)が0.75より小さい場合にはAレジスタのLSBから数えて16ビット目が必ず”0”であるため、上記論理積の結果は”0”になる。
処理1402の判定結果がNoならば、Cレジスタの値にQe{I(CX)}を加算した値をCレジスタに設定する処理1403を行う。再正規化処理は不要である。
処理1402の判定結果がYesならば、レジスタAの値とQe{I(CX)}の比較判定の処理1404を行い、Aレジスタの値がQe{I(CX)}より小さいときにはQe{I(CX)}を新しい確率区間としてAレジスタに設定する処理1406を行い、そうでなければCレジスタの値からQe{I(CX)}を減算した値をCレジスタに設定する処理1405を行う。次に、インデックス値I(CX)に対応した次のインデックス値NMPS(NMPS{I(X)}と表す)を確率推定テーブルより取得し、これを現在のコンテクストCXに対する新しいインデックス値I(CX)とする処理1407を行い、最後に符号化時再正規化処理1408を実行する。なお、この符号化時再正規化処理1408と図8中の符号化時再正規化処理1308は同一の処理である。
図10は符号化時再正規化処理1308,1408の内容を説明するためのフローチャートである。まず、AレジスタとCレジスタを1ビットだけ左シフトし、バイトカウンタCTを1だけデクリメントする処理1501を実行する。次に、バイトカウンタCTの値が0であるか判定する処理1502を行い、その判定結果がYesならはバイト出力処理1503を行ってから、Aレジスタの値が”0x8000”未満であるか判定する処理1504を行う。この判定結果がYesならば処理1501からのループが繰り返される。このループはAレジスタの値が”0x8000”以上になると終了する。
なお、図10中のバイト出力処理1503と図4中のFLUSH処理1004の内容については、本発明の理解に必要とされないため説明を省略する。
[MQ−Coder方式の復号器の概要]
図11は復号器のデータ入出力を示す。図示のように、復号器に符号とコンテキスト(CX)が入力し、復号器より再生された2値シンボル(D)が出力される。
図11は復号器のデータ入出力を示す。図示のように、復号器に符号とコンテキスト(CX)が入力し、復号器より再生された2値シンボル(D)が出力される。
図12に復号器におけるAレジスタとCレジスタの構成を示す。CレジスタはChighレジスタとClowレジスタに分割されているが、符号の読み込み時や再正規化時等にはClowレジスタとChighレジスタを結合した32ビット構成のCレジスタとして扱われる。復号時の比較処理にはChighレジスタのみ利用される。また、復号器においても、確率推定に図3に示した確率推定テーブルが利用される。
図13に復号器の全体的処理フローを示す。最初に復号器の初期化処理2000が実行される。次にコンテクストCXの読み込み処理2001と復号処理2002が、復号終了の判定処理2003で終了と判定されまで繰り返し実行される。換言すれば、復号器は上記各処理に対応した処理手段からなり、そして、それら各手段は後述するような内部処理のための手段から構成される。
なお、コンピュータ上で復号器を実現する場合、以上の各処理2000,2001,2002,2003をコンピュータで実行させるためのプログラム、あるいは、各処理に対応した手段としてコンピュータを機能させるプログラムがコンピュータにロードされることになる。処理実行に関連したA,Cレジスタ、その他のレジスタ、カウンタ、バイトバッファ、ポインタ等としてコンピュータの汎用レジスタ又はメモリが利用される。
図14は初期化処理2000の内容を説明するためのフローチャートである。なお、図13に示されていないが、符号器の場合と同様に、各コンテクスト(CX)に対するインデックス値(I(CX)と表記)とMPSシンボル(MPS(CX)と表記)が図6に示すようなデフォルト値に設定される。
まず、バイトバッファのポインタBPをバイトバッファの開始位置BPSTに設定し、バイトバッファのBPで示される位置のバイトデータB(符号の最初のバイト)をChighレジスタの下位バイトにセットする処理2101を行う。次にバイト入力処理2102を実行するが、この処理内容は本発明の理解に必要でないため説明を省略する。次に、Cレジスタを7ビット左シフトし、バイトカウンタCTの値を7だけ減らし、Aレジスタに初期値”0x8000”(十進数0.75)を設定する処理2103を行う。
図15は復号処理2002の内容を説明するためのフローチャートである。まず、現在のコンテクストCXに対するインデックス値I(CX)に対応したQe値であるQe{I(CX)}を図3の確率推定テーブルから取得し、この値をAレジスタの値から減算した結果をAレジスタに設定する処理2201を行う。つまり、MPS副区間を計算するわけである。次に、Chighレジスタの値がQe{I8CX)}より小さいか判定する処理2202を行い、その判定結果がYesならばLPSシンボル変更処理2203を実行し、続き異復号時再正規化処理2204を実行する。
処理2202の判定結果がNoの場合、Chighレジスタの値からQe{I(CX)}を減算した結果をChighレジスタに設定する処理2205を行い、Aレジスタの値が”0x8000”より小さいか判定する処理2206を行う。その判定結果がNoならば、現在のコンテクストCXのMPSシンボルであるMPS(CX)を再生シンボルDとして出力する処理2207を行う。処理2206の判定結果がYesの場合、MPSシンボル変更処理2208を実行し、続いて復号時再正規化処理2209を実行する。この復号時再正規化処理2209は復号時再正規化処理2204と同一処理である。
図16はLPSシンボル変更処理2203の内容を説明するためのフローチャートである。まず、Aレジスタの値がQe{I(CX)}より小さいか判定する処理2301を行う。この判定結果がYesならば、現コンテクストについてのMPS/LPSシンボルの交換は不要であるので処理2302を行う。この処理では、Aレジスタに確率推定テーブルより取得したQe{I(CX)}を設定し、現コンテクストのMPSシンボルであるMPS(CX)を再生シンボルDとして出力する。また、インデックス値I(CX)に対応したNMPS{(CX)}を確率推定テーブルより取得し、これを現コンテクストに対する新しいインデックス値I(CX)とする。
処理2301の判定結果がNoの場合、確率推定テーブルよりQe{I(CX)}を取得し、これをAレジスタに設定し、現コンテクストのMPSシンボルであるMPS(CX)を反転したシンボルを再生シンボルDとして出力する処理2303を行う。次に、確率推定テーブルよりSWITCH{I(CX)}を取得し、それが”1”であるか判定する処理2304を行う。その判定結果がYesならば現コンテクストのMPSシンボルを反転する処理2305をおこなった後、確率推定テーブルより現コンテクストCXのインデックス値I(CX)に対応したNLPS{I(CX)}を取得し、これを現コンテクストの新しいインデックス値I(CX)とする処理2306を行う。
図17はMPSシンボル変更処理2208の内容を説明するためのフローチャートである。まず、Aレジスタの値がQe{I(CX)}より小さいか判定する処理2401を行う。この判定結果がNoならば、現コンテクストについてのMPS/LPSシンボルの交換は不要であるので処理2402を行う。この処理では、現コンテクストのMPSシンボルであるMPS(CX)を再生シンボルDとして出力する。また、インデックス値I(CX)に対応したNMPS{(CX)}を確率推定テーブルより取得し、これを現コンテクストに対する新しいインデックス値I(CX)とする。
処理2401の判定結果がYesの場合、現コンテクストのMPSシンボルであるMPS(CX)を反転したシンボルを再生シンボルDとして出力する処理2403を行う。次に、確率推定テーブルよりSWITCH{I(CX)}を取得し、それが”1”であるか判定する処理2404を行う。その判定結果がYesならば現コンテクストのMPSシンボルを反転する処理2405をおこなった後、確率推定テーブルより現コンテクストCXのインデックス値I(CX)に対応したNLPS{I(CX)}を取得し、これを現コンテクストの新しいインデックス値I(CX)とする処理2406を行う。
図18は復号時再正規化処理2204,2209の内容を説明するためのフローチャートである。まず、バイトカウンタCTの値が0であるか判定する処理2504を行い、その判定結果がYesならばバイト入力処理2505を行う。なお、このバイト入力処理2505は図14中のバイト入力処理2102は同一処理である。次にAレジスタA及びCレジスタを1ビット左シフトし、バイトカウンタCTを1だけデクリメントする処理2506を行い、Aレジスタの値が”0x8000”より小さいか判定する処理2507を行う。この判定結果がYesならば処理2504からのループを繰り返す。このループは、Aレジスタの値が”0x8000”以上になったときに終了する。
次に、本発明の符号器及び復号器について、以上に説明した符号器及び復号器(従来の符号器及び復号器と呼ぶ)との相違点を中心に説明する。なお、便宜上、符号器及び復号器の構成を処理アルゴリズムの観点から説明するが、その際に参照する各フローチャート中の各処理は符号器及び復号器の構成手段の機能と読み替えることが可能であることは当然である。
[第1の実施形態]
本発明の第1の実施形態に係る復号器について説明する。本復号器のデータ入出力は図11に示す通りである。本復号器におけるCレジスタ及びAレジスタの構成は図12に示す通りである。また、本復号器の全体的な処理フローもしくは全体的構成は図13のように表すことができる。ただし、後述するように、復号処理(復号処理手段)2002の処理内容もしくは内部構成は従来の復号器と一部異なる。
本発明の第1の実施形態に係る復号器について説明する。本復号器のデータ入出力は図11に示す通りである。本復号器におけるCレジスタ及びAレジスタの構成は図12に示す通りである。また、本復号器の全体的な処理フローもしくは全体的構成は図13のように表すことができる。ただし、後述するように、復号処理(復号処理手段)2002の処理内容もしくは内部構成は従来の復号器と一部異なる。
本復号器においても、従来の復号器と同様に、確率推定に確率推定テーブルを利用する。ただし、本復号器では、図3に示した確率推定テーブルに、各インデックス値に対応付けたShift_a値を追加した図19に示すような確率推定テーブルが用いられる。なお、Shift_a値とインデックス値との組を確率推定テーブルとは別に用意するようにしてもよく、かかる態様も本実施形態に包含される。Shift_a値は、対応したQe値を左ビットシフトにより”0x8000”(0.75)以上の値にするために必要な最小シフト回数である。
本復号器の復号処理2002の処理フローは図15のように表されるが、LPSシンボル変更処理2203の後の復号時再正規化処理2204の内容が従来の復号器と異なる。MPSシンボル変更処理2208の後の復号時再正規化処理2209の内容は従来の復号器と同じである。
図20は本復号器における復号時再正規化処理2204の内容を説明するためのフローチャートである。まず、図19の確率推定テーブルより現コンテクストCXのインデックス値I(CX)に対応したShift_a値(これをShift_a(I(CX))と表記する)を取得し、バイトカウンタCTの値がShit_a(I(CX))以下であるか判定する処理3001を行い、判定結果がYesならばバイト入力処理3002を行う。このバイト入力処理3002は図18のバイト入力処理2505と同一処理である。次に、Aレジスタ及びCレジスタをShift_a(I(CX))ビット分左シフトし、バイトカウンタCTをShift_a(I(CX))分デクリメントする処理3003を実行する。
LPSシンボル変更処理2203(図16)において、処理2302又は処理2303でAレジスタに確率推定テーブルより取得されたQe{I(CX)}が設定され、この値は変更されないため、図20に示す処理によって再正規化を行うことができる。
このように、本復号器においては、復号時再正規化処理2204はループの繰り返しが全くないため、ソフトウェアによって本復号器を実現する場合に復号時再正規化処理2204を大幅に高速化することができる。
なお、MPSシンボル変更処理2208では図17に示すようにAレジスタの値を予め特定できないため、その後の復号時再正規化処理2209は従来の復号器と同様に図18に示したループの繰り返し処理によって行われる。
以上の説明から理解されるように、従来の復号器と比較するならば、本復号器は、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値が、コンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことに特徴がある。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値が、コンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことに特徴がある。
コンピュータを本復号器として動作させることも容易である。コンピュータを従来の復号器として動作させるためのプログラムに比較すると、コンピュータを本復号器として動作させるためのプログラムは、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させた後、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけAレジスタとCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることに特徴がある。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させた後、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけAレジスタとCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることに特徴がある。
[第2の実施形態]
本発明の第2の実施形態に係る復号器について説明する。本復号器のデータ入出力は図11に示す通りである。本復号器のCレジスタ及びAレジスタの構成は図12に示す通りである。また、本復号器の全体的な処理フロー(全体的構成)は図13のように表すことができる。ただし、後述するように、復号処理2002の内容は従来の復号器と一部異なる。
本発明の第2の実施形態に係る復号器について説明する。本復号器のデータ入出力は図11に示す通りである。本復号器のCレジスタ及びAレジスタの構成は図12に示す通りである。また、本復号器の全体的な処理フロー(全体的構成)は図13のように表すことができる。ただし、後述するように、復号処理2002の内容は従来の復号器と一部異なる。
本復号器においても確率推定に確率推定テーブルを利用する。ただし、本復号器に利用される確率推定テーブルには、図21に示すように、各インデックス値に対応付けて、Shift_a値と、Qe値をShift_a回左ビットシフトした後の値であるQeLPS値が追加されている。なお、Shift_a値、QeLPS値及びインデックス値との組を確率推定テーブルとは別に用意するようにしてもよく、かかる態様も本実施形態に包含される。なお、Shift_a値は、対応したQe値を左ビットシフトにより”0x8000”(0.75)以上の値にするために必要な最小シフト回数である。
本復号器の復号処理2002の処理フローは図15のように表されるが、LPSシンボル変更処理2203及び復号時再正規化処理2204の内容が従来の復号器と異なる。MPSシンボル変更処理2208及び復号時再正規化処理2209の内容は従来の復号器と同じである。
図22は本復号器におけるLPSシンボル変更処理2203のフローチャートである。図15のフローチャートとの違いは、処理2302A,2303Aにおいて、確率推定テーブル(図21)より取得したQeLPS{I(CX)}をAレジスタに設定する点である。これ以外は図16に示した処理内容と変わらない。
図23は本復号器における復号時再正規化処理2204のフローチャートである。図20に示した復号時再正規化処理の内容との違いは、処理3003AでAレジスタの左ビットシフト操作を行わない点である。これは、図22の処理2302A又は処理2303Aで、Aレジスタに必要な左ビットシフト操作後の(再正規化済みの)Qe値が設定されているからである。
このように、本復号器においては、復号時再正規化処理2204にループの繰り返しが全くないため、ソフトウェアによって本復号器を実現する場合に復号時再正規化処理2204を大幅に高速化することができる。
なお、MPSシンボル変更処理2208では図17に示すようにAレジスタの値を予め特定できないため、その後の復号時再正規化処理2209は図18に示したループの繰り返し処理によって行われる。
以上の説明から理解されるように、従来の復号器と比較するならば、本復号器は、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理において、コンテクストのインデックス値に対応したQeLSP値をAレジスタに設定し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことに特徴がある。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理において、コンテクストのインデックス値に対応したQeLSP値をAレジスタに設定し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことに特徴がある。
コンピュータを本復号器として動作させることも容易である。コンピュータを従来の復号器として動作させるためのプログラムと比較すると、コンピュータを本復号器として動作させるためのプログラムは、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させ、この際にコンテクストのインデックス値に対応したQeLSP値をメモリより読み出させてAレジスタに設定させ、
LPSシンボル変更処理後に復号時再正規化処理を実行させ、この復号時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることに特徴がある。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させ、この際にコンテクストのインデックス値に対応したQeLSP値をメモリより読み出させてAレジスタに設定させ、
LPSシンボル変更処理後に復号時再正規化処理を実行させ、この復号時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることに特徴がある。
[第3の実施形態]
本発明の第3の実施形態に係る符号器について説明する。本符号器のデータ入出力は図1に示す通りであり、そのCレジスタ及びAレジスタの構成は図2に示す通りである。また、本符号器の全体的な処理フローもしくは全体的構成は図4のように表すことができる。ただし、後述するように、符号化処理1002の内容は従来の符号器と一部異なる。
本発明の第3の実施形態に係る符号器について説明する。本符号器のデータ入出力は図1に示す通りであり、そのCレジスタ及びAレジスタの構成は図2に示す通りである。また、本符号器の全体的な処理フローもしくは全体的構成は図4のように表すことができる。ただし、後述するように、符号化処理1002の内容は従来の符号器と一部異なる。
本符号器においては、前記第1の実施形態に係る復号器と同様に図19に示すようにShift_a値が追加された確率推定テーブルが用いられる。Shift_a値とインデックス値との組を確率推定テーブルとは別に用意するようにしてもよく、かかる態様も本実施形態に包含される。前述した通り、Shift_a値は、対応したQe値を左ビットシフトにより”0x8000”(0.75)以上の値にするために必要な最小シフト回数である。
本符号器の符号化処理1002の処理フローは図7のように表されるが、LPS符号化処理1204,1206及びMPS符号化処理1205,1207における符号化時再正規化処理の内容が以下に説明するように従来の符号器と一部異なる。
まず、LPS符号化処理1204,1206の処理内容は図8に示す通りであるが、処理1304を経由した場合と処理1303を経由した場合とで符号化時再正規化処理1308の内容が異なる。すなわち、処理1304を経由した場合の符号化時再正規化処理1308は従来の符号器と同様の図10に示すようなループの繰り返し処理となる。
一方、処理1303を経由した場合の符号化時正規化処理1308は図24に示すようなフローとなる。まず、図19の確率推定テーブルより現コンテクストCXのインデックス値I(CX)に対応したShift_a値(これをShift_a(I(CX))と表記する)を取得し、バイトカウンタCTの値がShit_a(I(CX))以下であるか判定する処理4001を行い、判定結果がYesならばバイト出力処理4002を行う。このバイト出力処理4002は図10のバイト出力処理1503と同一処理である。次に、Aレジスタ及びCレジスタをShift_a(I(CX))ビット分左シフトし、バイトカウンタCTをShift_a(I(CX))分デクリメントする処理4003を実行する。
LPS符号化処理(図8)の処理1303でAレジスタに確率推定テーブルより取得されたQe{I(CX)}が設定され、この値は変更されないため、図24に示す処理によって再正規化を行うことができる。このようなループの繰り返しが全くない再正規化処理は、ソフトウェアによって高速に実行することができる。
また、MPS符号化処理1205,1207の処理内容は図9に示す通りであるが、処理1406を経由した場合と経由しない場合とで符号化時再正規化処理1408の内容が異なる。すなわち、処理1406を経由しない場合の符号化時再正規化処理1408は従来の符号器と同様に図10に示すループの繰り返し処理となる。
一方、処理1406を経由した場合の符号化時正規化処理1408は図24に示すフローとなる。処理1406を経由した場合、Aレジスタに図19の確率推定テーブルより取得されたQe{I(CX)}が設定され、この値は変更されないため、図24に示す処理によって再正規化を行うことができる。このようなループの繰り返しが全くない再正規化処理はソフトウェアによって高速に実行することができる。
以上の説明から理解されるように、従来の符号器と比較するならば、本符号器は、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、
LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことに特徴がある。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、
LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことに特徴がある。
コンピュータを本符号器として動作させることも容易である。コンピュータを従来の符号器として動作させるためのプログラムと比較するならば、コンピュータを本符号器として動作させるためのプログラムは、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させた後、該読み出したShift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該読み出したShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることに特徴がある。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させた後、該読み出したShift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該読み出したShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることに特徴がある。
[第4の実施形態]
本発明の第4の実施形態に係る符号器について説明する。本符号器のデータ入出力は図1に示す通りである。本符号器のCレジスタ及びAレジスタの構成は図2に示す通りである。また、本符号器の全体的な処理フローもしくは全体的構成は図4のように表すことができる。ただし、後述するように、符号化処理1002の内容は従来の符号器と一部異なる。
本発明の第4の実施形態に係る符号器について説明する。本符号器のデータ入出力は図1に示す通りである。本符号器のCレジスタ及びAレジスタの構成は図2に示す通りである。また、本符号器の全体的な処理フローもしくは全体的構成は図4のように表すことができる。ただし、後述するように、符号化処理1002の内容は従来の符号器と一部異なる。
本符号器においては、前記第2の実施形態に係る復号器と同様に図21に示すShift_a値とQeLPS値が追加された確率推定テーブルが用いられる。Shift_a値、QeLPS値及びインデックス値との組を確率推定テーブルとは別に用意するようにしてもよく、かかる態様も本実施形態に包含される。
本符号器の符号化処理1002の処理フローは図7のように表されるが、LPS符号化処理1204,1206及びMPS符号化処理1205,1207の内容が以下に説明するように従来の符号器と一部異なる。
まず、図25は本符号器におけるLPS符号化処理1204,1206のフローチャートである。図8のフローチャートに示す処理内容との違い次の通りである。一つは、処理1303Aにおいて、現コンテクストのインデックス値I(CX)に対応したQeLPS値を確率推定テーブルより取得し、これをAレジスタに設定する点である。もう一つは、処理1303Aを経由しない場合の符号化時再正規化処理1308は図10に示すループの繰り返し処理となるが、処理1303Aを経由した場合の符号化時再正規化処理1308は図27に示すような処理となる点である。
また、図26は本符号器におけるMPS符号化処理1205,1207のフローチャートである。図9のフローチャートに示す処理内容との違い次の通りである。一つは、処理1406Aにおいて、現コンテクストのインデックス値I(CX)に対応したQeLPS値を確率推定テーブルより取得し、これをAレジスタに設定する点である。もう一つは、処理1406Aを経由しない場合の符号化時再正規化処理1408は図10に示すループの繰り返し処理となるが、処理1406Aを経由した場合の符号化時再正規化処理1408は図27に示すような処理となる点である。
図27に示した再正規化処理と図24に示した再正規化処理との違いは、処理3003AでAレジスタの左ビットシフト操作を行わない点である。これは、図25の処理1303A又は図26の処理1406Aで、Aレジスタに、必要な左ビットシフト操作後(再正規化済み)のQe値が設定されているからである。このようなループの繰り返しのない符号化時再正規化処理はソフトウェアによって高速に実行可能である。
以上の説明から理解されるように、従来の符号器と比較するならば、本符号器は、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をAレジスタに設定し、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことに特徴がある。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をAレジスタに設定し、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことに特徴がある。
また、コンピュータを本符号器として動作させることも容易である。コンピュータを従来の符号器として動作させるためのプログラムと比較するならば、コンピュータを本符号器として動作させるためのプログラムは、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をメモリより読み出させてAレジスタに設定させ、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることに特徴がある。
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をメモリより読み出させてAレジスタに設定させ、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることに特徴がある。
なお、前記各実施形態に係る復号器又は符号器としてコンピュータを動作させるためのプログラムを記録した磁気ディスク、光ディスク、光磁気ディスク、半導体記憶素子等のコンピュータが読み取り可能な各種情報記録(記憶)媒体も本発明に包含される。
また、前記各実施形態に係る符号器及び復号器をハードウェアによって実現することも可能であり、かかる態様も本発明に包含されることは当然である。
また、以上に説明した本発明の概念は、MQ−Coderに類似した他の符号化方式、例えば2値画像圧縮方式のJBIG1で定義されているQM−Coder方式の符号器又は復号器等に容易に応用可能である。
1003 符号化処理
1204,1206 LPS符号化処理
1205,1207 MPS符号化処理
1308,1408 符号化時再正規化処理
2002 復号処理
2203 LPSシンボル変更処理
2204,2209 復号時再正規化処理
2208 MPSシンボル変更処理
1204,1206 LPS符号化処理
1205,1207 MPS符号化処理
1308,1408 符号化時再正規化処理
2002 復号処理
2203 LPSシンボル変更処理
2204,2209 復号時再正規化処理
2208 MPSシンボル変更処理
Claims (9)
- MQ−Coder方式の復号器であって、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値が、コンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする復号器。 - MQ−Coder方式の復号器であって、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPSシンボル変更処理において、コンテクストのインデックス値に対応したQeLSP値をAレジスタに設定し、
LPSシンボル変更処理後の復号時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト入力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする復号器。 - MQ−Coder方式の符号器であって、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、
LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする符号器。 - MQ−Coder方式の符号器であって、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けて保持し、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をAレジスタに設定し、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、バイトカウンタCTの値がコンテクストのインデックス値に対応したShift_a値以下であることを条件にバイト出力処理を実行した後、該Shift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該Shift_a値だけバイトカウンタCTをデクリメントする操作を行うことを特徴とする符号器。 - コンピュータをMQ−Coder方式の復号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させた後、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけAレジスタとCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることを特徴とするプログラム。 - コンピュータをMQ−Coder方式の復号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
LPSシンボル変更処理を実行させ、この際にコンテクストのインデックス値に対応したQeLSP値をメモリより読み出させてAレジスタに設定させ、
LPSシンボル変更処理後に復号時再正規化処理を実行させ、この復号時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出されたShift_a値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることを特徴とするプログラム。 - コンピュータをMQ−Coder方式の符号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理においてコンテクストのインデックス値に対応したQe値がAレジスタに設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させた後、該読み出したShift_a値で示されるシフト回数だけAレジスタ及びCレジスタを左ビットシフトする操作及び該読み出したShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることを特徴とするプログラム。 - コンピュータをMQ−Coder方式の符号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したQe値を左ビットシフトにより”0x8000”以上の値にするために必要な最小シフト回数を示すShift_a値及び該Shift_a値で示される回数だけQe値を左ビットシフトしたQeLSP値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むLPS符号化処理又はMPS符号化処理を実行させ、
LPS符号化処理又はMPS符号化処理において、コンテクストのインデックス値に対応したQe値をAレジスタに設定すべき条件のときにQe値に代えて該インデックス値に対応したQeLPS値をメモリより読み出させてAレジスタに設定させ、
LPS符号化処理又はMPS符号化処理においてAレジスタにQeLPS値が設定された場合には、LPS符号化処理又はMPS符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したShift_a値をメモリより読み出させ、バイトカウンタCTの値が該読み出したShift_a値以下であることを条件にバイト出力処理を実行させ、その後に、該読み出されたShift_a値で示されるシフト回数だけCレジスタを左ビットシフトする操作及び該読み出されたShift_a値だけバイトカウンタCTをデクリメントする操作を実行させることを特徴とするプログラム。 - 請求項5,6,7又は8に記載のプログラムが記録されたことを特徴とするコンピュータが読み取り可能な情報記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006035788A JP2007215145A (ja) | 2006-02-13 | 2006-02-13 | 符号器、復号器、プログラム及び情報記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006035788A JP2007215145A (ja) | 2006-02-13 | 2006-02-13 | 符号器、復号器、プログラム及び情報記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007215145A true JP2007215145A (ja) | 2007-08-23 |
Family
ID=38493141
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006035788A Pending JP2007215145A (ja) | 2006-02-13 | 2006-02-13 | 符号器、復号器、プログラム及び情報記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007215145A (ja) |
-
2006
- 2006-02-13 JP JP2006035788A patent/JP2007215145A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10051285B2 (en) | Data compression using spatial decorrelation | |
US9413387B2 (en) | Data compression using entropy encoding | |
JP4139330B2 (ja) | 改良された可変長デコーダ | |
JP5289333B2 (ja) | データストリームを生成し、データストリーム内の位置を識別する方法 | |
JP4717780B2 (ja) | 符号化装置及びその制御方法 | |
EP1540962B1 (en) | Method and apparatus for arithmetic coding and decoding | |
JP3684128B2 (ja) | 算術符号化/復号化方法ならびに算術符号化/復号化装置 | |
JP2006129467A (ja) | 整数データの無損失適応符号化・復号化 | |
WO2020186535A1 (zh) | 点云属性编码方法和装置以及点云属性解码方法和装置 | |
MX2010014341A (es) | Método para codificar una cantidad de bits de una sección de datos y método correspondiente de descodificacion, método para codificar o descodificar datos de audio y/o video, método para transmitir datos de audio y/o video y medio de almacenamiento q | |
JP2006287862A (ja) | 復号化装置 | |
US6518896B1 (en) | Multiple symbol length lookup table | |
JP2007215145A (ja) | 符号器、復号器、プログラム及び情報記録媒体 | |
JPH11103257A (ja) | 算術符号化復号化装置 | |
JP3991348B2 (ja) | 符号化装置および方法、復号装置および方法、並びに記録媒体 | |
JP2003198858A (ja) | 符号化装置および復号化装置 | |
JP4936574B2 (ja) | 符号化装置及びその制御方法 | |
TWI852255B (zh) | 視訊編碼裝置以及相關視訊編碼方法 | |
JP3384287B2 (ja) | 符号化装置および復号化装置 | |
JP2934603B2 (ja) | 可変長さコードの復号化方法及びその装置 | |
JP6280266B2 (ja) | 復号装置、及び復号方法 | |
KR100847077B1 (ko) | 허프만 부호화 방법 및 이를 구현하기 위한 프로그램이기록된 기록 매체 | |
JP3791793B2 (ja) | ディジタル信号符号化方法、復号化方法、符号器、復号器、符号化プログラム、及び復号化プログラム | |
JP4862894B2 (ja) | 符号化装置と方法及びプロセッサ | |
JP2014116835A (ja) | 復号装置、符号化装置、復号方法、及び符号化方法 |