JP5661836B2 - 逆離散コサイン変換の計算中の誤差の低減 - Google Patents

逆離散コサイン変換の計算中の誤差の低減 Download PDF

Info

Publication number
JP5661836B2
JP5661836B2 JP2013048219A JP2013048219A JP5661836B2 JP 5661836 B2 JP5661836 B2 JP 5661836B2 JP 2013048219 A JP2013048219 A JP 2013048219A JP 2013048219 A JP2013048219 A JP 2013048219A JP 5661836 B2 JP5661836 B2 JP 5661836B2
Authority
JP
Japan
Prior art keywords
butterfly structure
coefficients
structure operation
module
matrix
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.)
Expired - Fee Related
Application number
JP2013048219A
Other languages
English (en)
Other versions
JP2013211011A (ja
Inventor
ユリー・レズニク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=38624012&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP5661836(B2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2013211011A publication Critical patent/JP2013211011A/ja
Application granted granted Critical
Publication of JP5661836B2 publication Critical patent/JP5661836B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/625Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using discrete cosine transform [DCT]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • H04N19/45Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder performing compensation of the inverse transform mismatch, e.g. Inverse Discrete Cosine Transform [IDCT] mismatch
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Discrete Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)

Description

利益の主張
本願は、2006年6月26日に出願された米国仮出願第60/816,697号、2006年8月30日に出願された米国仮出願第60/841,362号、2006年9月25日に出願された米国仮出願第60/847,194号、2006年10月16日に出願された米国仮出願第60/829,669号、および2006年12月11日に出願された米国仮許出願第60/869,530号の利益を主張するものであり、それらの全体の内容は、参照によりここに組み込まれる。
本開示は、コンピュータグラフィックスおよびマルチメディアに関し、特に、グラフィックス、画像、およびビデオ情報の圧縮(compression)に関する。
多数の既存の画像およびビデオの符号化規格は、比較的コンパクトなファイルまたはデータストリームとして、記憶され、または送信されるべき高分解能の画像およびビデオを可能にするために、圧縮技法を使用している。そのような符号化規格は、ジョイントフォトグラフィックエキスパートグループ(Joint Photographic Experts Group)(JPEG)規格と、ムービングピクチャーエキスパートグループ(Moving Pictures Experts Group)(MPEG)−1規格と、MPEG−2規格と、MPEG−4パート2規格と、H.261規格と、H.263規格と、他の画像またはビデオの符号化規格とを含む。
これらの規格の多くに従って、ビデオフレームは、「空間」符号化を使用して圧縮される。これらのフレームは、元のフレーム(original frame)(すなわち、i−フレーム)とすることができ、あるいは動き補償を使用する時間符号化プロセス(temporal encoding process)により生成される残留フレーム(residual frame)とすることができる。空間符号化中に、フレームは、等しいサイズの、ピクセルのブロックへと分解される。例えば、非圧縮フレームは、1組の8×8のピクセルのブロックへと分解されることができる。ピクセルの各ブロックについて、ピクセル成分(pixel component)は、ピクセル成分値(pixel component value)の行列へと分離される。例えば、ピクセルの各ブロックは、Yピクセル成分値の行列と、Uピクセル成分値の行列と、Vピクセル成分値の行列とに分割されることができる。この例においては、Yピクセル成分値は、輝度値(luminance value)を指し示し、Uピクセル成分値とVピクセル成分値は、クロミナンス値(chrominance value)を表す。
さらに、空間符号化中に、順方向離散コサイン変換(forward discrete cosine transform)(FDCT)は、符号化されているフレーム内のピクセル成分値の各行列に適用される。理想的な一次元FDCTは、
Figure 0005661836
によって定義され、ここで、sは、N個の元の値のアレイであり、tは、N個の変換された値のアレイであり、そして係数cは、1≦k≦N−1の場合に
Figure 0005661836
によって与えられる。
理想的な二次元FDCTは、式、
Figure 0005661836
によって定義され、ここで、sは、N個の元の値のアレイであり、tは、N個の変換された値のアレイであり、そしてc(i,j)は、c(i,j)=c(i)c(j)によって与えられ、そしてc(k)は、一次元の場合におけるように定義される。
係数の行列は、ピクセル成分値のブロックが、FDCTを使用して、変換されるときに生成される。次いで、係数のこの行列は、例えば、ハフマン符号(Huffman code)または算術符号(arithmetic code)を使用して量子化され(quantized)、そして符号化されることができる。ビデオビットストリーム(video bitstream)は、非圧縮の一連のビデオフレーム(video frame)における一連のビデオフレームにおけるピクセル成分値のすべてのブロックに対してこのプロセスを実行することの組み合わされた結果を表す。
非圧縮ビデオフレームは、このプロセスを逆にすることによりビデオビットストリームから導き出されることができる。特に、ビットストリームにおける係数の各行列へと伸張され(decompressed)、それらの伸張された値は、変換された係数の行列を導き出すために逆量子化される(de-quantized)。次いで、逆離散コサイン変換(inverse discrete cosine transform)(「IDCT」)が、ピクセル成分値の行列を導き出すために変換された係数の各行列に対して適用される。理想的な一次元IDCTは、
Figure 0005661836
によって定義され、ここで、sは、N個の元の値のアレイであり、tは、N個の変換された値のアレイであり、そして係数cは、1≦k≦N−1の場合に
Figure 0005661836
によって与えられる。
理想的な二次元IDCTは、式、
Figure 0005661836
によって定義される。次いで、ピクセル成分値の結果として生ずる行列は、ピクセルのブロックに再アセンブルされ、ピクセルのこれらのブロックは、復号されたフレームを形成するために再アセンブルされる。復号されたフレームが、i−フレームである場合、そのフレームは今や完全に復号される。しかしながら、非圧縮フレーム(uncompressed frame)が、予測フレーム(predictive frame)または双予測フレーム(bi-predictive frame)である場合には、復号されたフレームは、単に復号された残留フレームであるにすぎない。完了されたフレームは、復号されたフレームに関連する動きベクトル(motion vector)を使用して再構成されたフレームを構成することと、次いで復号された残留フレームに再構成されたフレームを加えることと、により生成される。
理想的な状況の下では、情報は、符号化するFDCT、またはピクセル成分値のブロックを復号するIDCTを使用することにより失われない。その結果として、これらの理想的な状況の下では、ビデオフレームの復号されたバージョンは、ビデオフレームの元のバージョンと同一である。しかしながら、FDCTおよびIDCTの計算が乗算演算の有効数字(significant numbers)および実数(real numbers)の使用を伴うので、FDCTまたはIDCTを計算することは、計算上、難しい可能性がある。この理由のために、FDCTおよびIDCTにおいて使用される実数は、しばしば限られた精度数(precision number)を使用して近似される。丸め誤差(rounding error)が、実数値を表すために限られた精度数を使用することからもたらされる。さらに、量子化および逆量子化が、追加の誤差をもたらす可能性がある。
圧縮および伸張のプロセスにおける誤差は、元の非圧縮フレームと最終的な非圧縮フレームとの間にかなりの差をもたらす可能性がある。例えば、最終的な非圧縮フレームにおけるカラーは、元の非圧縮フレームにおけるカラーとは異なる可能性がある。さらに、IDCTのエンコーダのインプリメンテーションと、IDCTのデコーダのインプリメンテーションとの間のミスマッチによって引き起こされる誤差は、予測フレームのシーケンスの符号化と復号化との間に累積する可能性がある。これらの累積された誤差は、一般に「IDCTドリフト(IDCT drift)」と称される。
固定小数点計算(fixed-point calculation)を使用して逆離散コサイン変換の計算を近似する技法が、説明される。これらの技法によれば、スケール変更された係数の行列(matrixes of scaled coefficients)が、スケールファクタ(scale factors)により、符号化された係数の行列の中の係数を乗算することによって生成される。次に、バイアスされた係数の行列が、中間点バイアス値と補足的バイアス値とをスケール変更された係数の行列のDC係数に加算することによって生成される。次いで、固定小数点算術演算が、バイアスされた係数の結果として生ずる行列に対して変換を適用するために使用される。次いで、結果として生ずる行列の中の値は、ピクセル成分値の行列を導き出すために右シフトされる(right-shifted)。次いで、ピクセル成分値の行列は、ピクセルの行列を作成するために組み合わされる。これらの技法によって生成されるピクセルの行列は、理想的な逆離散コサイン変換(「IDCT」)を使用して伸張されたピクセルの行列に非常に似ている。
一態様においては、方法は、変換された係数のベクトルを生成するために、ソース係数のベクトルに対して変換を適用するように(to apply)、固定小数点数に対して一連のバタフライ構造演算(a series of butterfly structure operations on fixed-point numbers)を使用すること、を備える。変換された係数のベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数のベクトルを変換することにより生成されることになる(would be produced)値の近似値(approximation)である。本方法はまた、メディアプレゼンテーションユニット(media presentation unit)が、変換された係数のベクトルの中の変換された係数に基づいて可聴信号(audible signal)または可視信号(visible signal)を出力するようにすること、も備える。バタフライ構造演算のうちの1つによって生成される結果と、無制限精度算術演算(unlimited precision arithmetic)を使用して等しいバタフライ構造演算により生成されることになる結果と、の間の差は、ゼロの周囲に集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである。
別の態様においては、デバイスは、変換された係数のベクトルを生成するためにソース係数のベクトルに対して変換を適用するように固定小数点数に対して一連のバタフライ構造演算を使用する逆変換モジュール、を備える。変換された係数のベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数のベクトルを変換することにより生成されることになる値の近似値である。メディアプレゼンテーションユニットは、変換された係数のベクトルの中の変換された係数に基づいて可聴信号または可視信号を提示することができる。バタフライ構造演算のうちの1つによって生成される結果と、無制限精度算術演算を使用して等しいバタフライ構造演算により生成されることになる結果と、の間の差は、ゼロの周囲に集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである。
別の態様においては、デバイスは、変換された係数のベクトルを計算するためにソース係数のベクトルに対して変換を適用するように固定小数点数に対して一連のバタフライ構造演算を使用するための手段、を備える。変換された係数のベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数のベクトルを変換することにより生成されることになる値の近似値である。メディアプレゼンテーションユニットは、変換された係数のベクトルの中の変換された係数に基づいて可聴信号または可視信号を提示することができる。バタフライ構造演算のうちの1つによって生成される結果と、無制限精度算術演算を使用して等しいバタフライ構造演算により生成されることになる結果と、の間の差は、ゼロの周囲に集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである。
別の態様においては、コンピュータ可読媒体は、命令を備える。実行されるときに、本命令は、プロセッサに、変換された係数のベクトルを生成するために係数のベクトルに対して変換を適用するように固定小数点数に対して一連のバタフライ構造演算を使用させる(cause)。変換された係数のベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数のベクトルを変換することにより生成されることになる値の近似値である。本命令はまた、プロセッサに、メディアプレゼンテーションユニット対して、変換された値のベクトルの中の変換された値に基づいて可聴信号または可視信号を出力させることも、させる。バタフライ構造演算のうちの1つによって生成される結果と、無制限精度算術演算を使用して等しいバタフライ構造演算により生成されることになる結果と、の間の差は、ゼロの周囲に集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである。
いくつかの場合には、本コンピュータ可読媒体は、コンピュータプログラムプロダクト(computer program product)の一部分を形成することができ、このコンピュータプログラムプロダクトは、製造業者に対して販売され、かつ/またはデバイスにおいて使用されることができる。コンピュータプログラムプロダクトは、コンピュータ可読媒体を含むことができ、そしていくつかの場合には、パッケージング材料を含むこともできる。
1つまたは複数の例の詳細は、添付の図面、および下記の説明の中で述べられる。本発明の他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかであろう。
メディアファイルを符号化し、復号する例示のデバイスを示すブロック図である。 符号化モジュールの例示の詳細を示すブロック図である。 復号化モジュールの例示の詳細を示すブロック図である。 符号化モジュールの例示のオペレーションを示すフローチャートである。 復号化モジュールの例示のオペレーションを示すフローチャートである。 逆離散コサイン変換(「IDCT」)モジュールの例示の詳細を示すブロック図である。 IDCTモジュールの例示のオペレーションを示すフローチャートである。 順方向離散コサイン変換(「FDCT」)モジュールの例示の詳細を示すブロック図である。 FDCTモジュールの例示のオペレーションを示すフローチャートである。 第1の例示の一次元変換(one-dimensional transform)を示す流れ図である。 第2の例示の一次元変換を示す流れ図である。 IDCTモジュールによって使用される例示のスケール変更された一次元変換を示す流れ図である。
詳細な説明
図1は、メディアファイルを符号化し、復号する例示のデバイス2を示すブロック図である。デバイス2は、パーソナルコンピュータ、モバイル無線電話、サーバ、ネットワーク電気器具(network appliance)、乗り物と一体化されたコンピュータ、ビデオゲーミングプラットフォーム(video gaming platform)、ポータブルビデオゲームデバイス、コンピュータワークステーション、コンピュータキオスク(computer kiosk)、デジタル標識(digital signage)、メインフレームコンピュータ、テレビジョンセットトップボックス(television set-top box)、ネットワーク電話、携帯型個人情報端末(personal digital assistant)、ビデオゲームプラットフォーム(video game platform)、モバイルメディアプレーヤ(mobile media player)、ホームメディアプレーヤ、デジタルビデオプロジェクタ、パーソナルメディアプレーヤ(例えば、iPod)、あるいは別のタイプの電子デバイスを備えることができる。
デバイス2は、メディアデータを生成するメディアソース4(media source)を含むことができる。メディアソース4は、画像データを取り込むデジタルビデオまたはスチルフォトカメラ(still photo camera)を備えることができる。メディアソース4は、デバイス2内に構築されることもでき、あるいは周辺デバイスとしてデバイス2に取り付けられることもできる。メディアソース4は、オーディオデータを記録するためにマイクロフォンを備えることもできる。メディアソース4は、プロセッサ6に対してメディアデータを供給することができる。プロセッサ6は、デジタル信号プロセッサ(digital signal processor)(「DSP」)、マイクロプロセッサ、または何らかの他のタイプの集積回路を備えることができる。
プロセッサ6が、メディアソース4からメディアデータを受け取るとき、符号化モジュール(encoding module)8は、メディアデータを符号化することができる。符号化モジュール8は、プロセッサ6によって実行されるソフトウェアを備えることができる。代わりに、符号化モジュール8は、メディアデータを符号化するプロセッサ6内に専用ハードウェアを備えることもできる。さらに別の代替案においては、符号化モジュール8は、メディアデータを符号化するためにソフトウェアとハードウェアとの任意の組合せを備えることもできる。
符号化モジュール8は、符号化されたメディアデータをメディアリポジトリ(media repository)10に記憶することができる。メディアリポジトリ10は、フラッシュメモリ、ランダムアクセスメモリ、ハードディスクドライブ、または何らかの他のタイプの揮発性または不揮発性のデータストレージユニットを備えることができる。
復号化モジュール(decoding module)12は、メディアリポジトリ10から符号化されたメディアデータを取り出すことができる。復号化モジュール12は、プロセッサ6によって実行されるソフトウェアを備えることができる。代わりに、復号化モジュール12は、符号化されたメディアデータを復号するプロセッサ6内に専用ハードウェアを備えることができる。さらに別の代替案においては、復号化モジュール12は、符号化されたメディアデータを復号するように協力するソフトウェアとハードウェアとの組合せを備えることができる。
デバイス2の中のプレゼンテーションドライバ(presentation driver)13は、メディアプレゼンテーションユニット(media presentation unit)14が、復号化モジュール12によって復号されたメディアデータを提示するようにする。例えば、メディアプレゼンテーションユニット14は、画像またはビデオのメディアデータを提示するコンピュータモニタを備えることができる。別の例においては、メディアプレゼンテーションユニット14は、オーディオメディアデータを提示するオーディオ出力デバイス(例えば、スピーカ)を備えることができる。メディアプレゼンテーションユニット14は、デバイス2へと一体化されることができ、あるいは周辺デバイスとしてデバイス2に対してワイヤードリンク(wired link)またはワイヤレスリンク(wireless link)を経由して接続されることができる。プレゼンテーションドライバ13は、デバイスドライバまたは他のソフトウェア、ハードウェアまたはファームウェアのユニット、あるいはメディアプレゼンテーションユニット14が、メディアデータを提示するようにする何らかの他のメカニズムを備えることができる。
デバイス2は、ネットワークインターフェース(network interface)16を備えることもできる。ネットワークインターフェース16は、ワイヤードリンクまたはワイヤレスリンクを経由して、デバイス2とコンピュータネットワークとの間の通信を容易にすることができる。例えば、ネットワークインターフェース16は、デバイス2とモバイル電話ネットワークとの間の通信を容易にすることができる。デバイス2は、ネットワークインターフェース16を経由してメディアファイルを受信することができる。例えば、デバイス2は、ネットワークインターフェース16を介して、写真、ビデオクリップ、ストリーミングビデオ(例えば、テレビジョン、ビデオ会議、映画)、オーディオクリップ(例えば、リングトーン(ringtone)、歌、MP3ファイル)、ストリーミングオーディオ(例えば、デジタルラジオ局、音声呼出しなど)を受信することができる。ネットワークインターフェース16が、メディアファイルまたはビデオビットストリームを受信するときに、ネットワークインターフェース16は、メディアファイルまたはビデオビットストリームをメディアリポジトリ10に記憶することができる。
ビデオ信号は、ピクチャのシーケンスの観点で説明されることができ、このピクチャのシーケンスは、フレーム(全体のピクチャ)、あるいはフィールド(例えば、フレームの奇数ラインまたは偶数ラインのいずれかを備えるピクチャ)を含む。さらに、おのおののフレームまたはフィールドは、2つ以上のスライス、あるいはそのフレームまたはフィールドの副次的部分(sub-portion)を含むことができる。ここにおいて使用されるように、単独で、あるいは他の言葉と組み合わせてのいずれかで、用語「フレーム」は、ピクチャ、フレーム、フィールド、またはそのスライスを意味することができる。
符号化モジュール8が、一連のビデオフレームを符号化するときに、符号化モジュール8は、「i−フレーム」となるようにビデオフレームのうちの1つを選択することにより、開始することができる。例えば、符号化モジュール8は、8番目ごとのフレームをi−フレームとして選択することができる。i−フレームは、他のフレームを参照しないフレームである。i−フレームを選択した後に、符号化モジュール8は、i−フレームを符号化するために「空間符号化」を使用する。さらに、符号化モジュール8は、残りのフレームを符号化するために「時間符号化」を使用することができる。
フレームを符号化するために空間符号化を使用するために、符号化モジュール8は、フレームデータをピクセルのブロックへと分解することができる。例えば、符号化モジュール8は、8ピクセルの幅と、8ピクセルの高さである、ピクセルのブロックへとフレームデータを分解することができる(すなわち、ピクセルの各ブロックは、64個のピクセルを含む)。次いで、符号化モジュール8は、ピクセルの各ブロックにおけるピクセルのピクセル成分値をピクセル成分値の別個の行列へと分離することができる。ピクセルのピクセル成分値は、ピクセルの外観を特徴づける値である。例えば、各ピクセルは、Yピクセル成分値、Crピクセル成分値、およびCbピクセル成分値を指定することができる。Yピクセル成分値は、ピクセルの輝度を指し示し、Crピクセル成分値は、ピクセルの赤色クロミナンスを指し示し、そしてCbピクセル成分値は、ピクセルの青色クロミナンスを指し示す。この例においては、符号化モジュール8が、ピクセルのブロックのピクセル成分値を分離するとき、符号化モジュール8は、Yピクセル成分値の行列と、Crピクセル成分値の行列と、Cbピクセル成分値の行列とを取得することができる。
ピクセル成分値をピクセル成分値の行列へと分離した後に、符号化モジュール8は、ピクセル成分値の行列のおのおのについて変換された係数の行列を生成する。符号化モジュール8は、ピクセル成分値の行列の中のピクセル成分値を左シフトすることにより、調整された係数の行列を最初に生成することにより、ピクセル成分値の行列について変換された係数の行列を生成することができる。次いで、符号化モジュール8は、調整された係数の行列に対して一次元変換を繰り返し適用するために固定小数点算術演算を使用し、それによって係数の行列を生成する。いくつかのインプリメンテーションにおいては、次いで、符号化モジュール8は、1組のスケールファクタにより、変換された係数の行列をスケール変更することにより、変換された係数の行列を生成することができる。これらのスケールファクタのおのおのは、整数値である。スケールファクタは、一次元変換内のファクタが、簡単な有理数(rational number)を使用して近似されることができるようなやり方で選択されている。スケーリングを使用しないインプリメンテーションにおいては、変換を適用することにより生成される係数の行列は、変換された係数の行列である。
変換された係数の行列の中の各係数は、符号化された係数の行列に対して理想的な二次元順方向離散コサイン変換(「FDCT」)を適用することにより生成されることになる値の行列の中の対応する値を近似する。理想的な一次元FDCTは、
Figure 0005661836
によって定義され、ここで、sは、N個の元の値のアレイであり、tは、N個の変換された値のアレイであり、そして係数cは、1≦k≦N−1の場合に
Figure 0005661836
によって与えられる。
理想的な二次元FDCTは、式、
Figure 0005661836
によって定義され、ここで、sは、N個の元の値のアレイであり、tは、N個の変換された値のアレイであり、そしてc(i,j)は、c(i,j)=c(i)c(j)によって与えられ、そしてc(k)は、一次元の場合におけるように定義される。
変換された係数の行列を導き出した後に、符号化モジュール8は、変換された係数の行列の中の係数を量子化することにより、量子化された係数の行列を生成する。変換された係数を量子化することは、変換された係数の行列の中の高頻度の係数((high-frequency coefficients))に関連する情報の量を減少させることができる。量子化された係数の行列を生成した後に、符号化モジュール8は、量子化された係数の行列に対してエントロピー符号化スキームを適用することができる。例えば、符号化モジュール8は、係数の行列の中の量子化された係数に対してハフマン符号化スキーム(Huffman encoding scheme)を適用することができる。符号化モジュール8が、量子化された係数の行列のおのおのに対してエントロピー符号化スキームを適用するときに、符号化モジュール8は、ビデオビットストリームの一部分として、符号化された行列を出力することができる。
フレームを符号化する時間符号化を使用するために、符号化モジュール8は、フレームを「マクロブロック(macroblock)」に分割することができる。使用される符号化規格に応じて、これらのマクロブロックは、固定サイズまたは可変サイズとすることができ、そしてオーバーラップしており、またはオーバーラップしていないものとすることができる。例えば、各マクロブロックは、16×16のピクセルのブロックとすることができる。フレームの中の各マクロブロックについて、符号化モジュール8は、1つまたは複数の基準フレームの中のソースマクロブロック(source macroblock)を識別しようと試みることができる。符号化規格に応じて、基準フレームは、i−フレーム、予測フレーム、または双予測フレームとすることができる。符号化モジュール8が、基準フレームの中のソースマクロブロックを識別することができる場合、符号化モジュール8は、そのマクロブロックについての動きベクトルを記録する。動きベクトルは、識別されたソースマクロブロックに対するマクロブロックの水平変位(horizontal displacement)を指し示すx値と、識別されたソースマクロブロックに対するマクロブロックの垂直変位(vertical displacement)を指し示すy値と、を含む。符号化モジュール8が、マクロブロックについてのソースマクロブロックを識別することができない場合には、符号化モジュール8は、マクロブロックについての動きベクトルを記録ことが必要とされない可能性がある。次に、符号化モジュール8は、「再構成された」フレームを生成する。再構成されたフレームは、現在のフレームについての記録された動きベクトルに従って基準フレームからマクロブロックを移動させることからもたらされることになるフレームを含んでいる。再構成されたフレームを生成した後に、符号化モジュール8は、現在のフレームの対応するピクセルの中の対応するピクセル成分値から、再構成されたフレームの各ピクセルの中のピクセル成分値を差し引き、結果として「残留」フレームが、もたらされる。次いで、符号化モジュール8は、現在のフレームのマクロブロックについて動きベクトルを圧縮するためにエントロピー符号化スキームを使用することができる。さらに、符号化モジュール8は、残留フレームを圧縮するために、上記に説明される空間符号化技法を使用する。
復号化モジュール12は、符号化モジュール8と類似したプロセスを、但し逆に実行することができる。例えば、空間復号化プロセスを実行するために、復号化モジュール12は、符号化されたビデオビットストリームの中の量子化された係数の符号化された各行列に対してエントロピー復号化スキームを適用することができる。次いで、復号化モジュール12は、量子化された係数の各行列の中の係数を逆量子化することができ、それによって量子化された係数の各行列について逆量子化された係数の行列を生成する。量子化された係数の各行列では、復号化モジュール12は、量子化された係数の行列をスケール変更することによりスケール変更された係数の行列を生成する。
スケール変更された係数の行列を生成した後に、復号化モジュール12は、行列のDC係数に中間点バイアス値と補足的バイアス値とを加算することにより、バイアスされた係数の行列を生成する。行列のDC係数は、行列の中の他の係数の平均値に等しい係数である。一般的に、DC係数は、行列の左上隅における係数である。下記に詳細に説明されるように、DC係数に対するバイアス値の加算は、復号化モジュール12が、行列のおのおのの行および列に対して逆離散コサイン変換因数分解(inverse discrete cosine transform factorization)を適用することにより生成される値を右シフトするときに、丸め誤差を低減させることができる。これらの丸め誤差は、これらの右シフトが、より計算的に高価な除算演算(division operation)についての代用であることと、固定小数点算術演算における右シフト演算が、必ずしも除算演算と同じ結果をもたらすとは限らないこととに起因する可能性がある。
復号化モジュール12が、バイアスされた係数の行列を生成した後に、復号化モジュール12は、バイアスされた係数の行列について変換された係数の行列を生成するために固定小数点算術演算を使用する。復号化モジュール12は、バイアスされた係数の行列に対して一次元変換を繰り返し適用することにより変換された係数の行列を生成する。例えば、復号化モジュール12は、バイアスされた係数の行列の各行ベクトルに対して一次元変換を適用することにより中間係数の行列を生成することができる。この例においては、次いで、復号化モジュール12は、中間係数の行列の中の各列ベクトルに対して一次元変換を適用することにより、変換された係数の行列を生成することができる。
復号化モジュール12は、一連の「バタフライ構造演算」を使用してこの一次元変換を適用することができる。一般に、「バタフライ構造演算」は、第1の中間値が、第1の定数によって第1の入力値を乗算することにより生成され、第2の中間値が、第2の定数によって第1の入力値を乗算することにより生成され、第3の中間値が、第1の定数によって第2の入力値を乗算することにより生成され、第4の中間値が、第2の定数によって第2の入力値を乗算することにより生成され、第1の出力値が、第1の中間値と第3の中間値とを加算することにより生成され、そして第2の出力値が、第2の中間値と、第4の中間値の負数と、を加算することにより生成される演算を意味する。バタフライ演算においては、定数は、1を含めて任意の有理数または無理数とすることができる。例のバタフライ構造演算は、図10、11、および12の例において示される変換の中で示される。
数を表すために使用可能な限られた数のビットを有するシステムにおいては、バタフライ構造演算において無理定数(irrational constant)による乗算を実行することは、実用的でない可能性がある。この理由のために、復号化モジュール12は、無理定数を近似する有理分数(rational fraction)によって値を乗算することにより無理定数による乗算を近似することができる。有理分数によって値を効率的に乗算するために、復号化モジュール12は、有理分数の分母によって値を乗算し、次いで有理分数の分母のlogだけ結果として生ずる値を右シフトすることができる。上記に述べられるように、固定小数点算術演算における右シフト演算は、必ずしも対応する除算演算に等しい結果をもたらすとは限らないので、右シフト演算は、丸め誤差を引き起こす可能性がある。
下記に詳細に説明されるように、復号化モジュール12は、丸め誤差を低減させるために有理分数の一部においては負の分母を使用することができる。負の分母の使用は、値を右シフトすることに先立って中間点バイアス値を加算する必要性を除去することができる。中間点バイアス値を加算することは、逆離散コサイン変換の適用に対して不必要な複雑さを追加する可能性があるので、これは有利である可能性がある。
復号化モジュール12が、変換された係数の行列を生成しているときに、復号化モジュール12は、変換を適用することにより追加されるビットの数と、逆量子化された係数の行列の係数をスケール変更することにより追加されるビットの数とを加えたものに等しいポジションの数だけ、変換された係数の行列の中の各係数を右シフトすることにより、調整された係数の行列を生成する。次いで、復号化モジュール12は、調整された係数の行列の中の係数をクリップすることにより、クリップされた係数の行列を生成することができる。調整された係数の行列の中の係数をクリップすることは、それらが、ピクセル成分値についての許可された範囲内にあるように、調整された係数を修正する。それ故に、クリップされた係数の行列は、ピクセル成分値の行列として特徴づけられることができる。
ピクセル成分値の行列を生成した後に、復号化モジュール12は、ピクセルのブロックについての他のピクセル成分値を記憶する行列と、ピクセル成分値の行列を組み合わせることにより、ピクセルのブロックを生成することができる。次に、復号化モジュール12は、ピクセルのブロックをビデオフレームへと組み合わせることができる。
予測フレームを復号するために、復号化モジュール12は、予測フレームについての残留イメージにおける量子化された係数の行列を復号するために、上記に説明された空間復号化技法を使用することができる。さらに、復号化モジュール12は、予測フレームの動きベクトルを復号するためにエントロピー復号化スキームを使用することができる。次に、復号化モジュール12は、動きベクトルに従って予測フレームの基準フレームのマクロブロックを「移動させること」により、再構成されたフレームを生成することができる。再構成されたフレームを生成した後に、復号化モジュール12は、再構成されたフレームの対応するピクセルにおける対応するピクセル成分値に、復号された残留フレームの各ピクセルにおけるピクセル成分値を加算する。この加算の結果は、再構成された予測フレームである。
この開示において説明される技法は、いくつかの長所を提供することができる。例えば、離散コサイン変換と、逆離散コサイン変換との計算中における丸め誤差の低減は、画像データにおける可視誤差を低減させることができ、そしてオーディオデータにおける可聴誤差を低減させることができる。さらに、これらの技法は、固定小数点計算に対して適用することができるので、これらの技法は、モバイル電話、携帯型個人情報端末、パーソナルメディアプレーヤなど、より小型の、あまり複雑でないデバイスの中で適用されることができる。特に、本技法は、依然として米国電気電子学会(Institute of Electrical and Electronics Engineers)(IEEE)規格1180により指定される精度要件に準拠しながら、それらの仮数部分に非常に限られた数のビット(例えば、3ビット)を有する固定小数点数を使用して、適用されることができ、この規格の全体の内容は、ここに参照により組み込まれている。さらに、これらの技法は、国際電気通信連合標準化部門(International Telecommunication Union Standardization Sector)(ITU−T)勧告H.261、H.263、H.264、T.81(JPEG)、ならびに国際標準化機構(International Organization for Standardization)(ISO)/MECムービングピクチャーエキスパートグループ(Moving Picture Experts Group)(MPEG)−1、MPEG−2、およびMPEG−4パート2メディアフォーマット(MPEG-4 Part 2 media formats)を含むフォーマットに対して適用されることができる。
図2は、符号化モジュール8の詳細の例を示すブロック図である。符号化モジュール8は、1組の「モジュール」を備えることができる。これらのモジュールは。符号化モジュール8のソフトウェア命令のサブセットを備えることができる。代わりに、これらのモジュールは、専用ハードウェアを備えることもできる。別の代替案においては、これらのモジュールは、ソフトウェア命令と専用ハードウェアとを備えることもできる。
図2の例において示されるように、符号化モジュール8は、符号化モジュール8が、i−フレームか、予測フレームか、あるいは双予測フレームのいずれとしてビデオフレームを処理するかを制御するフレーム制御モジュール(frame control module)20を含んでいる。例えば、符号化モジュール8が、ビデオフレームを受け取るときに、フレーム制御モジュール(frame control module)20は、ビデオフレームに関連するビットストリームフラグ(bitstream flag)が、そのフレームがi−フレームか、予測フレームか、あるいは双予測フレームのいずれを指し示すかを決定することができる。ビットストリームフラグが、そのフレームがi−フレームであることを指し示すことをフレーム制御モジュール20が決定する場合、フレーム制御モジュール20は、ビデオフレームが、ビデオフレームに対する空間符号化を直ちに実行する1組のモジュールによって処理されるようにすることができる。他方、フレーム制御モジュール20が、そのフレームが予測フレームまたは双予測フレームであることを決定する場合には、フレーム制御モジュール20は、ビデオフレームが、時間符号化を実行する1組のモジュールによって処理されるようにすることができる。
符号化モジュール8は、ビデオフレームに対して空間符号化を適用する一連のモジュールを含んでいる。これらのモジュールは、ブロックスプリッタモジュール(block splitter module)22と、成分抽出モジュール(component extraction module)24と、順方向変換モジュール(forward transform module)26と、量子化モジュール(quantization module)28と、エントロピー符号化モジュール(entropy encoding module)30とを含む。ブロックスプリッタモジュール22は、メディアソース4、ネットワークインターフェース16、または別のソースから符号化されていないビデオフレームを受け取ることができる。ブロックスプリッタモジュール22が、符号化されていないビデオフレームを受け取るときに、ブロックスプリッタモジュール22は、そのフレームをピクセルのブロックへと分離することができる。ブロックスプリッタモジュール22は、成分抽出モジュール24に対してピクセルのブロックを供給することができる。
成分抽出モジュール24が、ピクセルのブロックを受け取るとき、成分抽出モジュール24は、各ピクセルのピクセル成分値を異なるカラーフォーマットへと変換することができる。例えば、成分抽出モジュール24は、赤−緑−青(Red-Green-Blue)(RGB)カラーフォーマットからYCrCbカラーフォーマットへと各ピクセルを変換することができる。ブロックの中のピクセルを異なるカラーフォーマットへと変換した後に、成分抽出モジュール24は、ピクセルのピクセル成分値をピクセル成分値の行列へと分離することができる。例えば、成分抽出モジュール24は、1ブロックのピクセルからY値の行列と、Cr値の行列と、Cb値の行列とを抽出することができる。Y値は、ピクセルの輝度を指定し、Cr値は、ピクセルの赤色クロミナンスを指定し、そしてCb値はピクセルの青色クロミナンスを指定する。成分抽出モジュール24が、ピクセル成分値の行列を抽出しているときには、成分抽出モジュール24は、順方向変換モジュール26に対して行列のおのおのを別々に供給することができる。
順方向変換モジュール26が、ピクセル成分値の行列を受け取るとき、順方向変換モジュール26は、変換された係数の行列を生成する。スケール変更された係数のこの行列の中の各係数は、ピクセル成分値の行列を変換するために理想的な順方向離散コサイン変換を使用することにより生成されることになる係数に近い。
順方向変換モジュール26は、ピクセル成分値の行列に対して一次元変換を適用するために固定小数点算術演算を使用する。固定小数点算術演算を使用することは、いくつかの状況において有利である可能性がある。例えば、モバイル電話などのより小型のデバイスは、浮動小数点算術演算を実行するために必要とされる浮動小数点ユニットを含まないかもしれない。順方向変換モジュール26は、ピクセル成分値のおのおのを左シフトすることにより、スケール変更された係数の行列を生成するプロセスを開始することができる。例えば、順方向変換モジュール26は、順方向変換モジュール26が、一次元変換を適用するときに使用する数の固定小数点表現の精度のビットの数(すなわち、仮数ビットの数)と、その変換を適用することからもたらされる変換された係数をスケール変更することにより除去される精度のビットの数と、を加えたものだけピクセル成分値のおのおのを左シフトすることにより調整された係数の行列を生成することができる。ピクセル成分値のおのおのを左シフトした後に、順方向変換モジュール26は、調整された係数の行列の行ベクトルのおのおのに対して変換を実行することができる。調整された係数の行列の行ベクトルのおのおのに対して離散コサイン変換を実行することは、中間係数の行列を生成する。次に、順方向変換モジュール26は、中間係数の行列の列ベクトルのおのおのに対して変換を実行することができる。中間係数の行列の列ベクトルのおのおのに対して変換を実行することは、変換された係数の行列をもたらす。
変換された係数の行列を生成した後に、順方向変換モジュール26は、変換された係数の行列の中の異なる位置における変換された係数を異なるスケールファクタだけスケール変更する。下記に説明されるように、復号化モジュール12は、逆変換の適用において、これらのスケールファクタの逆数(reciprocal)を使用することができる。順方向変換モジュール26が、変換された係数をスケールファクタだけスケール変更することを完了しているときに、順方向変換モジュール26は、スケール変更された係数の結果として生ずる行列を量子化モジュール28に対して出力することができる。
量子化モジュール28が、順方向変換モジュール26から係数の行列を受け取るときに、量子化モジュール28は、スケール変更された係数を量子化することができる。量子化モジュール28は、使用されている符号化規格に応じて様々なやり方でスケール変更された係数を量子化することができる。例えば、MPEG−4パート2規格に従って、量子化モジュール28は、i−フレームについてのスケール変更された係数の行列の中の係数を量子化するために次の量子化行列を使用することができる。
Figure 0005661836
さらに、この例においては、量子化モジュール28は、予測フレームまたは双予測フレームについてスケール変更された係数の行列の中の係数を量子化するために次の量子化行列を使用することができる。
Figure 0005661836
量子化モジュール28が、量子化された係数の行列を生成した後に、エントロピー符号化モジュール30は、エントロピー符号化スキームを使用して量子化された係数の行列を圧縮することができる。エントロピー符号化スキームを使用して量子化された係数の行列を圧縮するために、エントロピー符号化モジュール30は、係数のジグザグパターン(zigzag pattern)を利用することにより、量子化された係数をベクトルへと構成することができる。換言すれば、エントロピー符号化モジュール30は、予測可能値(predictable)における量子化された係数の一次元ベクトルへと、量子化された係数の二次元行列の中の量子化された係数のすべてを構成することができる。次いで、エントロピー符号化モジュール30は、量子化された係数のベクトルに対して、ハフマン符号化や算術演算符号化などのエントロピー符号化スキームを適用することができる。
符号化モジュール8は、ビデオフレームの時間符号化を実行する1つまたは複数のモジュールも含んでいる。図2の例に示されるように、符号化モジュール8は、動き推定モジュール(motion estimation module)32と、再構成フレーム生成モジュール(reconstructed frame generation module)34と、残留フレーム生成モジュール(residual frame generation module)36とを含む。動き推定モジュール32は、現在のビデオフレームにおける各マクロブロックについての基準画像におけるソースマクロブロックを識別しようと試みる。動き推定モジュール32は、類似したピクセルをマクロブロックとして含む基準画像におけるマクロブロックについてサーチする(search)ことにより、現在のフレームにおけるマクロブロックについてのソースマクロブロックを識別しようと試みることができる。動き推定モジュール32は、現在のフレームにおけるマクロブロックについてのソースマクロブロックを識別するために、異なる符号化規格に従って異なるサイズの区域をサーチすることができる。例えば、動き推定モジュール32は、サーチ区域の中心に現在のマクロブロックを有する、32ピクセル幅×32ピクセル高さのピクセルである区域内のソースマクロブロックについてサーチすることができる。動き推定モジュール32が、現在のフレームにおけるマクロブロックについてのソースマクロブロックを識別するとき、動き推定モジュール32は、現在のフレームにおけるマクロブロックについての動きベクトルを計算する。現在のフレームにおけるマクロブロックについての動きベクトルは、識別されたソースマクロブロックと、現在のフレームのマクロブロックとの間の、水平位置における差を指し示すx値を指定する。動き推定モジュール32が、動きベクトルを計算しているか、あるいは現在のフレームにおける各マクロブロックについてのソースマクロブロックを識別することができなくなっているかのいずれかの後に、動き推定モジュール32は、再構成フレーム生成モジュール34に対して現在のフレームについての計算された動きベクトルを供給することができる。
再構成フレーム生成モジュール34は、再構成されたフレームを生成するために動きベクトルと基準フレームとを使用することができる。再構成フレーム生成モジュール34は、基準フレームにおけるソースマクロブロックに対して現在のフレームにおける各マクロブロックについての動きベクトルを適用することにより、再構成されたフレームを生成することができる。実際上、再構成フレーム生成モジュール34は、基準フレームのマクロブロックが、現在のフレームの対応する動きベクトルによって指し示される位置に「移動」させられているフレームを作成する。
残留フレーム生成モジュール36は、現在のフレームにおける対応するピクセル成分値から再構成されたフレームにおけるピクセル成分値を差し引くことにより残留フレームを生成することができる。一般に、残留フレームは、再構成されたフレームまたは現在のフレームのいずれかよりも少ない情報を含んでいる。残留フレーム生成モジュール36が、残留フレームを生成した後に、残留フレーム生成モジュール36は、残留フレームを空間的に符号化するプロセスを開始するために、残留フレームをブロックスプリッタモジュール22に対して供給する。さらに、動き推定モジュール32は、動きベクトルを圧縮するために、現在のフレームについての動きベクトルをエントロピー符号化モジュール30に対して供給することができる。残留フレームが、空間的に符号化され、そしてエントロピー符号化モジュール30が、動きベクトルを符号化した後に、ストリーム出力モジュール38(stream output module)は、ビデオビットストリームの一部分として空間的に符号化された残留フレームと、符号化された動きベクトルと、をフォーマットすることができる。
図3は、復号化モジュール12の例示の詳細を示すブロック図である。復号化モジュール12は、エントロピー復号化モジュール44と、逆量子化モジュール46と、逆変換モジュール(inverse transform module)48と、ピクセル再構成モジュール(pixel reconstruction module)50と、フレームバッファ(frame buffer)51と、ブロックコンバイナモジュール(block combiner module)52と、フレーム制御モジュール(frame control module)53と、基準フレームストレージモジュール(reference frame storage module)54と、再構成フレーム生成モジュール(reconstructed frame generation module)56と、予測フレーム生成モジュール(predictive frame generation module)58と、を備えることができる。これらのモジュールのうちの一部または全部は、復号化モジュール12のソフトウェア命令のサブセットを備えることができる。代わりに、これらのモジュールの一部または全部は、専用のハードウェアまたはファームウェアを備えることもできる。別の代替案においては、これらのモジュールは、ソフトウェア命令と、専用のハードウェアまたはファームウェアとを備えることもできる。
復号化モジュール12が、ビデオフレームを含むビットストリームを受け取るときに、エントロピー復号化モジュール44は、ビデオフレームにおける量子化された係数の行列に対してエントロピー復号化スキームを適用することができる。そのビットストリームは、どのエントロピー復号化スキームをビットストリームにおける量子化された係数の行列に適用すべきかをエントロピー復号化モジュール44に対して指し示す値を含むことができる。さらに、エントロピー復号化モジュール44は、ビデオフレームの動きベクトルを復号するために、同じまたは異なるエントロピー復号化スキームを適用することができる。
エントロピー復号化モジュール44が、ビデオファイルにおける量子化された係数の行列に対してエントロピー復号化スキームを適用した後に、逆量子化モジュール46は、量子化された係数の行列のおのおのにおける係数を逆量子化することができる。符号化規格に応じて、逆量子化モジュール46は、様々なやり方でそれらの係数を逆量子化することができる。例えば、MPEG−4パート2規格に従って、逆量子化モジュール46は、2つの異なるやり方で上記にリストアップされた2つの量子化行列(quantization matrix)を使用することができる。第1に、逆量子化モジュール46は、H.263−スタイルの逆量子化を実行するためにこれらの量子化行列を使用することができる。H.263−スタイルの逆量子化において、逆量子化モジュール46は、次のように量子化された値QF[ν][u]から再構成された係数F’’[ν][u]を取得する。
Figure 0005661836
これは、quantizer_scaleによるただ1つの乗算を含む。
第2に、逆量子化モジュール46は、MPEG−1/2−スタイルの逆量子化を実行するためにこれらの量子化行列を使用することができる。MPEG−1/2−スタイルの逆量子化においては、逆量子化モジュール46は、追加の重み行列W[w][ν][u]を使用し、ここでwは、どの重み行列が使用されているのかを指し示す。
Figure 0005661836
逆変換モジュール48が、逆量子化された係数の行列を受け取るときに、逆変換モジュール48は、ピクセル成分の行列を生成する。下記に詳細に説明されるように、逆変換モジュール48は、逆変換された係数の行列における各係数を最初にスケール変更することと、行列のDC係数にバイアス値を加算することと、一連の一次元離散コサイン変換を適用することと、結果として生ずる値を右シフトすることと、右シフトされた値をクリップすることと、次いでクリップされた値を出力することと、により、ピクセル成分値の行列を生成する。
逆変換モジュール48が、ピクセル成分値の行列を出力した後に、ピクセル再構成モジュール50は、ビデオフレーム内の等価な位置に関連するピクセル成分値の行列とピクセル成分値の行列を組み合わせることにより、ピクセルの行列を生成することができる。例えば、ピクセル再構成モジュール50は、Yピクセル成分値の行列と、Cbピクセル成分値の行列と、Crピクセル成分値の行列とを逆変換モジュール48から受け取ることができる。これらの3つの行列のおのおのは、単一の8×8のピクセルのブロックについてのピクセル成分を含むことができる。ピクセルのおのおのは、Yピクセル成分値と、Cbピクセル成分値と、Crピクセル成分値とを含むことができる。ピクセルの行列を生成した後に、ピクセル再構成モジュール50は、ピクセルのブロックをブロックコンバイナモジュール(block combiner module)52に対して供給することができる。
ブロックコンバイナモジュール52が、ピクセルのブロックを受け取るときに、ブロックコンバイナモジュール52は、ブロックコンバイナモジュール52が、ビデオフレームにおけるピクセルのブロックのうちの一部または全部を受け取るまで、ピクセルのブロックをバッファすることができる。ピクセルのブロックのうちの1つまたは複数を受け取った後に、ブロックコンバイナモジュール52は、ピクセルのブロックをビデオフレームへと組み合わせることができ、ビデオフレームをフレームバッファ51に対して出力することができる。ビデオフレームは、それがメディアプレゼンテーションユニット(media presentation unit)51によって表示されるまで、フレームバッファ51に記憶されることができる。さらに、ブロックコンバイナモジュール52は、ビデオフレームをフレームストレージモジュール(frame storage module)54に対して出力することができる。フレームストレージモジュール54におけるビデオフレームは、予測フレームと双予測フレームとの再構成のための基準フレームとして使用されることができる。さらに、フレームストレージモジュール54におけるビデオフレームは、予測フレームと双予測フレームとの再構成において使用される残留フレームとすることもできる。
予測フレームまたは双予測フレームを再構成するために、復号化モジュール12は、再構成フレーム生成モジュール56を含んでいる。再構成フレーム生成モジュール56は、エントロピー復号化モジュール44から復号された動きベクトルを受け取る。さらに、再構成フレーム生成モジュール56は、フレームストレージモジュール54から現在のフレームの基準フレームを取り出す。次いで、再構成フレーム生成モジュール56は、基準フレームにおけるそれらの位置から動きベクトルによって指し示される位置へとマクロブロックを「移動させる」。再構成フレームは、このようにしてマクロブロックを移動させることからもたらされる。再構成フレーム生成モジュール56が、再構成されたフレームを生成した後に、再構成フレーム生成モジュール56は、再構成されたフレームを予測フレーム生成モジュール58へと供給する。
予測フレーム生成モジュール58が、一時的フレームを受け取るときに、予測フレーム生成モジュール58は、フレームストレージモジュール54から現在のフレームについての残留フレームを取り出すことができる。残留フレームを取り出した後に、予測フレーム生成モジュール58は、残留フレームと再構成されたフレームとの各ピクセルにおける対応するカラー成分値を加算することができる。再構成されたビデオフレームは、この加算からもたらされる。次に、予測フレーム生成モジュール58は、メディアプレゼンテーションユニット14上での最終的な表示のためにこの再構成されたフレームをフレームバッファ51に対して出力することができる。
図4は、符号化モジュール8の一例のオペレーションを示すフローチャートである。図4に説明されるオペレーションは、逐次的なやり方で説明されるが、本オペレーションは、パイプライン化されたやり方で実行されることができることに注意すべきである。
最初に、符号化モジュール8は、非符号化ビデオフレームのシーケンスを受け取る(60)。例えば、符号化モジュール8は、メディアソース4からピクセルの組の形態で非符号化フレームのシーケンスを受け取ることができる。符号化モジュール8が、非符号化フレームのシーケンスを受け取るときに、符号化モジュール8におけるフレーム制御モジュール20は、非符号化フレームのシーケンスにおける現在のフレームが、i−フレームとして符号化されるべきか、あるいは予測フレームまたは双予測フレームとして符号化されるべきかを決定することができる(62)。
フレーム制御モジュール20が、現在のフレームがi−フレームとして符号化されるべきであると決定する場合、符号化モジュール8におけるブロックスプリッタモジュール22は、現在のフレームをピクセルのブロックへと分割する(split)することができる(64)。例えば、符号化モジュール8は、現在のフレームを2×2、4×4、または8×8のピクセルのブロックへと分割することができる。
現在のフレームをピクセルのブロックへと分割した後に、成分抽出モジュール24は、ピクセル成分値をピクセルのブロックのおのおのへと分割することができる(66)。結果として、ピクセルの各ブロックについてのピクセル成分値の3つのブロック、すなわち、ピクセルの輝度を表すべきY値のブロックと、ピクセルの青色クロミナンスを表すべきCb値のブロックと、ピクセルの赤色クロミナンスを表すべきCr値のブロックと、が存在することができる。
次いで、符号化モジュール8における順方向変換モジュール26は、ピクセル成分値の行列のおのおのについてのスケール変更された係数の行列を生成することができる(68)。スケール変更された係数のこれらの行列における係数は、ピクセル成分値の行列のそれぞれの行列に対する理想的な2次元順方向離散コサイン変換を使用することにより生成されることになる値の近似値である。
順方向変換モジュール26が、ピクセル成分の行列のおのおのについてスケール変更された係数の行列を生成した後に、符号化モジュール8における量子化モジュール28は、スケール変更された係数の行列のおのおのにおける係数を量子化することができる(70)。ひとたび量子化モジュール28が、スケール変更された係数の各行列における係数を量子化した後に、エントロピー符号化モジュール30は、量子化された係数の行列のおのおのに対するエントロピー符号化プロセスを実行することができる(72)。例えば、符号化モジュール8は、量子化された係数の各行列に対してハフマン符号化スキームまたは算術演算符号化スキームを適用することができる。エントロピー符号化プロセスは、さらにデータを圧縮した。しかしながら、エントロピー符号化プロセスは、情報のロスをもたらしはしない。量子化された係数の各行列に対するエントロピー符号化プロセスを実行した後に、符号化モジュール8におけるストリーム出力モジュール38は、ビデオフレームのシーケンスについてビットストリームに対して量子化された係数の符号化された行列を追加することができる(74)。ストリーム出力モジュール38が、ビットストリームに対して符号化された行列を加算した後に、フレーム制御モジュール20は、現在のフレームが、フレームのシーケンスの最後のビデオフレームであったかどうかを決定することができる(76)。現在のフレームが、フレームのシーケンスの最後のフレームである(76の「YES」の)場合、符号化モジュール8は、フレームのシーケンスの符号化を完了している(78)。他方、現在のフレームが、フレームのシーケンスの最後のフレームではない(76の「NO」の)場合には、符号化モジュール8は、ループバックし、そして新しい現在のフレームが、i−フレームとして符号化されるべきかどうかを決定することができる(62)。
現在のフレームが、i−フレームとして符号化されるべきでない(62の「NO」の)場合、符号化モジュール8における動き推定モジュール32は、現在のフレームを1組のマクロブロックへと分割することができる(80)。次に、動き推定モジュール32は、現在のフレームにおけるマクロブロックのおのおのについて1つまたは複数の基準フレームにおけるソースマクロブロックを識別しようと試みることができる(82)。次いで、動き推定モジュール32は、動き推定モジュール32がソースマクロブロックを識別することが可能であった現在のフレームにおけるマクロブロックのおのおのについて動きベクトルを計算することができる(84)。動き推定モジュール32が、動きベクトルを計算した後に、再構成フレーム生成モジュール34は、基準フレームにおける識別されたマクロブロックを動きベクトルによって指し示される位置へと「移動させること」により、再構成されたフレームを生成するために動きベクトルを使用する(86)。次いで、残留フレーム生成モジュール36は、現在のフレームにおける対応するピクセル成分値から再構成されたフレームにおけるピクセル成分値を差し引くことにより、現在のフレームについて残留フレームを生成することができる(88)。残留フレーム生成モジュール36が、残留フレームを生成した後に、エントロピー符号化モジュール30は、現在のフレームについて動きベクトルを符号化するためにエントロピー符号化スキームを使用することができる(90)。さらに、空間符号化は、ステップ(66)から(74)を残留フレームに対して適用することにより、残留フレームに対して適用されることができる。
図5は、復号化モジュール12の例示のオペレーションを示すフローチャートである。図5に説明されるオペレーションは、逐次的なやり方で説明されるが、本オペレーションは、パイプライン化されたやり方で実行されることができることに注意すべきである。
最初に、復号化モジュール12は、符号化されたビデオフレームを受け取る(100)。符号化されたビデオフレームを受け取った後に、復号化モジュール12におけるエントロピー復号化モジュール44は、符号化されたフレーム内のデータのブロック上でエントロピー復号化プロセスを実行することができる(102)。エントロピー復号化モジュール44は、フレームを符号化するために使用されるエントロピー符号化プロセスと等価であるエントロピー復号化プロセスを実行することができる。例えば、符号化モジュール8が、フレームを符号化するためにハフマン符号化を使用する場合、エントロピー復号化モジュール44は、フレームを復号するためにハフマン復号化(Huffman decoding)を使用する。フレームにおけるデータの各ブロックに対してエントロピー復号化プロセスを適用する結果として、エントロピー復号化モジュール44は、量子化された係数の行列の組を生成している。
次に、復号化モジュール12における逆量子化モジュール46は、量子化された係数の行列のおのおのにおける係数を逆量子化することができる(104)。量子化された係数の行列における各係数を逆量子化した後に、復号化モジュール12における逆変換モジュール48は、ピクセル成分値の行列を生成する(106)。ピクセル成分値の行列のうちの1つにおけるピクセル成分値は、理想的な2次元逆離散コサイン変換を使用して量子化された係数の行列のうちの1つを変換することにより生成されることになる対応する値の近似値である。
逆変換モジュール48が、係数の行列のおのおのについてピクセル成分値の行列を計算しているときに、復号化モジュール12におけるピクセル再構成モジュール50は、ピクセルのブロックを作成するためにピクセル成分値の適切な行列(appropriate matrixes)を組み合わせることができる(108)。例えば、復号化モジュール12は、YCrCbピクセルのブロックを作成するために、Cr値の関連するブロックおよびCb値の関連するブロックと、Y値のブロックを組み合わせることができる。ピクセル再構成モジュール50が、ピクセルのブロックを作成した後に、ブロックコンバイナモジュール52は、ピクセルのブロックをビデオフレームへと再結合することができる(110)。
次に、復号化モジュール12におけるフレーム制御モジュール53は、現在のフレームが、i−フレームであるかどうかを決定することができる(114)。現在のフレームが、i−フレームである(114の「YES」の)場合、ブロックコンバイナモジュール52は、ビデオフレームをフレームバッファ51へと出力することができる(114)。他方、現在のフレームがi−フレームでない(すなわち、現在のフレームが予測フレーム、または双予測フレームである)(114の「NO」の)場合には、エントロピー復号化モジュール44は、現在のフレームの動きベクトルを復号するためにエントロピー復号化スキームを使用する(116)。次に、再構成フレーム生成モジュール56は、再構成されたフレームを生成するために、フレームストレージモジュール54における復号化された動きベクトルと、1つまたは複数の基準フレームとを使用する(118)。次いで、予測フレーム生成モジュール58は、再構成されたフレームを生成するために、再構成されたフレームと、ブロックコンバイナモジュール52によって生成されるフレームとを使用することができる(120)。
図6は、逆変換モジュール48の例示の詳細を示すブロック図である。図6の例に示されるように、逆変換モジュール48は、入力モジュール140を備えることができる。入力モジュール140は、逆量子化モジュール46から係数の行列を受け取ることができる。例えば、入力モジュール140は、係数の行列を記憶するデバイス2のメモリモジュールにおけるロケーションを指し示すポインタを受け取ることができる。代わりに、入力モジュール140は、係数の行列を記憶する内部データ構造を含むこともできる。
入力モジュール140が、逆量子化された係数の行列を受け取るときに、入力モジュール140は、逆変換モジュール48の中のスケーリングモジュール(scaling module)142に対して係数の行列を供給することができる。スケーリングモジュール142は、逆量子化された係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成する。スケーリングモジュール142は、固定小数点表現の数を表現するために、逆変換モジュール146によって使用されるいくつかの仮数ビットだけ各係数を左シフトすることにより、逆量子化された係数の行列の中の係数をスケール変更することができる。仮数ビットは、小数点(radix point)(すなわち、数の小数部分)の左側にあるこれらのビットのことである。このようにして、スケーリングモジュール142は、逆量子化された係数の行列の中の係数の表現を適切な数の仮数ビットを有する固定小数点表現に効果的に変換する。例えば、逆変換モジュール146が、3つの仮数ビットを含む固定小数点数を使用する場合、スケーリングモジュール142は、逆量子化された係数の行列の中の係数のおのおのを3つの位置だけ左シフトすることにより、スケール変更された係数の行列を生成する。
スケーリングモジュール142が、スケール変更された係数の行列を生成した後に、係数バイアシングモジュール(coefficient biasing module)144は、スケール変更された係数の行列のDC係数に対して中間バイアス値(midpoint bias value)と補足バイアス値(supplemental bias value)とを加算することにより、バイアスされた係数の行列を生成することができる。上記で論じられるように、行列のDC係数は、一般的に行列の左上位置にある係数である。一般に、DC係数は、行列の中の他の係数の平均値を表す。
補足バイアス値は、正の誤差と負の誤差とが、平均して大きさが等しくなるように、そして平均してゼロの周りで対称となるようにする値である。例えば、補足バイアス値は、DC係数が負でないときにゼロに等しく、そしてDC係数が負であるときに負の1に等しい符号適応バイアス値(sign-adaptive bias value)とすることができる。16−ビットプロセッサにおいて符号適応バイアス値をDC係数に加算するために、係数バイアシングモジュール144は、次の式を使用することができる。
DC_coefficient=DC_coefficient+(1<<(P+2))+(DC_coefficient>>15). (1)
式(1)において、項(1<<(P+2))は、中間バイアスを提供するために加算される。Pは、逆ベクトル変換モジュール146によって実行される変換において使用される固定小数点の仮数ビット(すなわち、小数点の右側に位置するビット(bits to the right of the radix point))の数を意味する定数である。数2は、右シフトモジュール148が、すべての係数を(P+3)だけ右シフトすることができるので、Pに対して加算され、ここで、数「3」は、逆離散コサイン変換を実行することにより追加される精度のビットに由来する。このポイントを詳しく述べると、数xが、1を(P+2)だけ左シフトすることにより生成され、そして数zが、xを(P+3)だけ右シフトすることにより生成される場合、そのときにはz=1/2である。(別の方法で述べると、2P+2/2P+3=2/2=1/2)。それ故に、DC係数に対して(1<<(P+2))を加算することは、DC係数に対して(1<<(P+3))/2を加算することに等しい。
式(1)において、項(DC_coefficient>>15)は、16−ビットDC係数を15の位置だけ右シフトする。残りの1ビットは、DC係数の符号を指し示す。例えば、DC係数は、0b1111 1100 0011 0101であったと仮定する。この例においては、符号拡張を用いて、DC係数を15の位置だけ右にシフトすることは、0b1111 1111 1111 1111(10進数、−1)の値をもたらす。同様に、DC係数が、0b0111 1111 1111 1111であった場合には、DC係数を15の位置だけ右にシフトすることは、0b0000 0000 0000 0000(10進数、0)の値をもたらす。
別の例においては、補足バイアス値は、ディザリングバイアス値(dithering bias value)とすることができる。ディザリングバイアス値は、−1または0に等しい値である。16−ビットプロセッサにおいてDC係数に対して符号ディザリングバイアス値を加算するために、IDCTモジュール34は、次の式を使用することができる。
DC_coefficient=DC_coefficient+(1<<(P+2))+dither(−1|0). (2)
式(2)において、Pは、DC_coefficientにおける仮数ビットの数を指し示す。項(1<<(P+2))は、中間バイアスを加算する。項dither(−1|0)は、IDCTモジュール34が、擬似ランダムベースで−1または0を選択することを指し示す。
係数バイアシングモジュール144は、スケール変更された係数の行列の中のAC係数のおのおのに対して中間バイアス値と補足バイアス値とを加算することもできる。行列のAC係数は、すべてDC係数以外の行列の中の係数である。AC係数のおのおのに対して中間バイアス値とスケール変更されたバイアス値とを加算することは、さらに丸め誤差を減少させることができる。
係数バイアシングモジュール144が、バイアスされた係数の行列を生成した後に、逆ベクトル変換モジュール146は、バイアスされた係数の行列に対して一次元変換を繰り返し適用するために固定小数点算術演算を使用することにより、変換された係数の行列を生成する。例えば、逆ベクトル変換モジュール146は、バイアスされた係数の行列の中の係数の各行ベクトルに対して一次元変換を適用するために固定小数点算術演算を使用することにより、中間値の行列を生成することができる。次に、逆ベクトル変換モジュール146は、中間値の行列の中の各列ベクトルに対して一次元変換を適用するために固定小数点算術演算を使用することにより、変換された係数の行列を計算することができる。例示の一次元変換が、以下で図10および11に示される。
逆ベクトル変換モジュール146が、変換された係数の行列を生成した後に、右シフトモジュール148は、変換の適用中およびスケール変更中に加えられるビットの数に等しい位置の数だけ、変換された係数の行列の中の係数のおのおのを右シフトすることにより、調整された係数の行列を生成することができる。例えば、変換を適用することが追加の3ビットをもたらし、係数をスケール変更することが追加の3ビットを加える場合、右シフトモジュール148は、係数のおのおのを6つ(3+3)の位置だけ右シフトすることができる。
右シフトモジュール148は、係数のおのおのを2によって除算する代わりとしてこの右シフトを実行することができ、ここで、bは、逆ベクトル変換モジュール146によって加えられる追加ビットの数と、スケール変更中にスケーリングモジュール142によって係数の仮数部分に加えられるビットの数とを加えたものに等しい。ソース画像データと結果画像データとの間の差は、x/2とx>>bとの間の差に起因して生ずる可能性があり、ここでxは、位置nにおける行列の中の係数である。これらの差のうちのいくつかは、固定小数点算術演算の限られた精度における事実のせいである丸め誤差に起因して生ずる可能性があり、(x>>b)は、xのすべての値について(x/2)に等しいとは限らない。例えば、符号化モジュール8は、16ビットの固定小数点数を使用することができ、x=63(2進数で0000 0000 0011 1111)そしてb=6である。この例においては、0000 0000 0011 1111を6つの位置だけ右にシフトすることは、0000 0000 0000 0000の2進値をもたらす。それ故に、63>>6=0である。一方では、63/2=31/64=0.984375である。0と0.984との間の差は、ソース画像データと結果画像データとの間の目に見える差をもたらす可能性がある。
DC係数に対してバイアス値を加算することは、丸め誤差に起因した差を低減させる。例えば、係数バイアシングモジュール144は、xに対して中間バイアス値を加算することができる。中間バイアス値cは、2/2=2(b−1)に等しくすることができる。例えば、b=6である場合、そのときにはc=2/2=64/2=32である。この例においては、x=63である場合、そのときには63+32=95(0b0000 0000 0101 1111)である。6つの位置だけ右シフトされた95=1(2進数で0b0000 0000 0000 0001)である。中間バイアス値を加算した後に生成される値1は、中間バイアス値を加算せずに生成される値0よりも0.984375という正しい値に対してより近い。
中間バイアス値cを加算することに加えて、係数バイアシングモジュール144は、補足バイアス値をDC係数に対して加算することもできる。例えば、係数バイアシングモジュール144は、符号適応バイアス値d(x)を加算することができる。xが負であり、そしてそうでなくて0に等しくなり得るときに、符号適応バイアス値d(x)は、−1に等しい可能性がある。符号適応バイアス値d(x)を加算することは、符号適応バイアス値d(x)のない値よりもよりよい近似値である値をもたらす可能性がある。例えば、符号適応バイアス値d(x)なしでは、関数(x+c)>>bは、0の周りで対称ではない。例えば、x=32、b=6、そしてc=32である場合、そのときには(x+c)>>b=1である。しかしながら、x=−32、b=6、そしてc=32である場合、そのときには(x+c)>>b=0である。ゼロの周りの対称性のこの欠如は、逐次的な予測ビデオフレームを計算するときに徐々により大きな誤差をもたらす可能性がある。さらに、x>>bとx/2との間の差は、xがゼロよりも小さいときよりもxがゼロよりも大きいときに、より大きくなる。これはまた、誤差を生成する可能性がある。
符号適応バイアス値d(x)は、これらの問題を正すことができる。例えば、x=32、b=6、c=32であることを仮定すると、そのときにはd(x)=0である。それ故に、(x+c+d(x))>>b=1である。次に、x=−32、b=6、c=32であることを仮定すると、そのときにはd(x)=−1である。それ故に、(x+c+d(x))>>b=−1である。この例は、関数(x+c+d(x))>>bが、今や0の周りで対称であり、(x)がゼロよりも小さいときよりもxがゼロよりも大きいときにより大きな差を生成することはないことを示している。
代替インプリメンテーションにおいては、係数バイアシングモジュール144は、符号適応バイアス値dを加算することの代わりに、ディザリングバイアス値eを加算することができる。係数バイアシングモジュール144が、DC係数に対してディザリングバイアス値eを加算するときに、係数バイアシングモジュール144は、擬似ランダムベースでeの値となるように値0または値−1のいずれかを選択することができる。ディザリングバイアス値eの値を選択するために、係数バイアシングモジュール144は、次の命令を含むことができる。
Figure 0005661836
多数のビデオ符号化規格は、ピクチャのグループ(group of pictures)(「GOP」)として知られているものを使用している。GOPは、GOP内においてi−フレームおよび/または他の予測フレームもしくは双予測フレームを参照するi−フレームと、1組の予測フレームおよび/または双予測フレームとを備える。例えば、メディアファイルは、1組の係数行列を使用して符号化されるi−フレームを含むことができる。ビデオシーケンスを生成するために、復号化モジュール12は、このi−フレームに基づいて予測フレームを生成することができる。i−フレームを復号することにより引き起こされる誤差は、i−フレームに基づいた予測フレームに反映される。さらに、予測フレームを復号することにより引き起こされる誤差は、次の予測フレームに組み込まれる。フレームを復号することにより引き起こされる誤差がゼロの周りで対称的でない、あるいはより大きな正または負の大きさを有する傾向がある場合、これらの誤差は、逐次的な予測フレームにおけるピクセル成分値の値を急速に増大させ、または低減させる可能性がある。例えば、誤差がより大きな正の誤差を有する傾向がある場合、これらの誤差は、逐次的な予測フレームにおいて累算する可能性があり、正しいピクセル成分値よりも高いピクセル成分値をもたらす。結果として、GOP内の逐次的な予測フレームにおけるピクセルが、不適切にカラーまたは輝度を変化させる可能性がある。これは、ドリフト誤差として知られている。あまりにも厳しすぎるドリフト誤差を回避するために、限られた数のフレームだけが、i−フレームから生成されることができる。丸めに起因して、より大きな精度を有する数を使用して変換を実行するときよりも限られた数の仮数ビット(例えば、3つの仮数ビット)を有する固定小数点数を使用して変換を実行するときに、誤差は、大きさがより大きくなる可能性がある。それ故に、ドリフト誤差は、限られた数の仮数ビットを有する固定小数点数を使用して変換を実行するときに特に問題になる可能性がある。
擬似ランダムベースでディザリングバイアス値eの値を選択することは、各予測フレームが、より大きな正の大きさを有する誤差、あるいはより大きな負の大きさを有する誤差を有する等しく可能性のある機会を有することを意味する。したがって、ピクチャのグループの内部で、正の誤差および負の誤差は、大きさが等しくなる傾向があり、そしてゼロの周りで対称となる傾向がある。正の誤差および負の誤差が、平均して、ゼロの周りで対称であり、正の誤差および負の誤差が、平均して、大きさが等しいので、誤差は、後続の予測フレームの中で伝搬され、誇張される可能性が高くない。これは、正の大きさを有する誤差が、別のフレームにおける負の大きさを有する誤差を打ち消し合う可能性が高いからであり、逆もまた同様である。それ故に、ディザリングバイアス値が、誤差をゼロの周りで対称にする傾向があり、正の誤差および負の誤差を大きさが等しいものにする傾向があるので、GOP全体を通してより小さなドリフト誤差が存在する可能性が高い。この理由のために、より多くのピクチャが、GOPに含まれる可能性がある。より多くのピクチャが、GOPに含まれる可能性があるので、全体的なビデオシーケンスは、よりよい圧縮レートを有する可能性がある。同様に、符号適応バイアス値を加算することは、大きさが等しくなる傾向があり、ゼロの周りで対称となる傾向がある、各フレーム内の誤差をもたらす。結果として、これらの誤差は、後続の予測フレームの中で伝搬され、そして誇張されることがない。
右シフトモジュール148が、係数を右シフトした後に、クリッピングモジュール(clipping module)150は、ピクセル成分値の最大許容可能範囲まで係数を制限するために、係数を「クリップする」ことができる。例えば、典型的なJPEG画像において、カラー成分値は、−256から255へと及ぶことができる。係数の行列が、270に等しい係数を含むようになっていた場合、クリッピングモジュール150は、係数を255まで減少させることにより、この係数を最大許容可能範囲まで制限することになる。クリッピングモジュール150が、係数をクリップすることを完了した後に、これらの係数は、ピクセル成分値を表すことができる。クリッピングモジュール150が、行列の中の係数をクリップすることを完了したときに、クリッピングモジュール150は、クリップされた係数の行列を出力モジュール152に対して供給することができる。
出力モジュール152が、係数(この係数は今やピクセル成分値である)の行列を受け取るときに、出力モジュール152は、ピクセル成分値の行列をピクセル再構成モジュール50に対して出力することができる。
図7は、逆変換モジュール34の例示のオペレーションを示すフローチャートである。最初に、入力モジュール140は、逆量子化された係数の行列を受け取る(170)。入力モジュール140が、逆量子化された係数の行列を受け取るときに、スケーリングモジュール142は、逆量子化された係数の行列の中の各値をスケール変更することができ、それによりスケール変更された係数の行列を生成する(172)。例えば、スケーリングモジュール142は、スケールファクタの行列の中の同等に位置づけられた値により、逆量子化された係数の行列の中の各係数を乗算するオペレーションを実行することができる。
スケーリングモジュール142が、スケール変更された係数の行列を生成した後に、係数バイアシングモジュール144は、スケール変更された係数の行列のDC係数に対して中間バイアス値と補足バイアス値とを加算することができ、それによりバイアスされた係数の行列を生成する(174)。係数バイアシングモジュール144が、行列のDC係数に対してバイアス値を加算した後に、逆ベクトル変換モジュール146は、行カウンタが最大行カウンタよりも小さいかどうかを決定することができる(176)。最初に、行カウンタは、ゼロに設定されることができる。最大行カウンタは、係数の行列の中の行の数に等しい静的な値とすることができる。例えば、係数の行列が8つの行を含む場合、最大行カウンタは、8に等しい。
行カウンタが、最大行カウンタよりも小さい(176の「YES」の)場合、逆ベクトル変換モジュール146は、行カウンタにより指し示される係数の行列の行ベクトルに対して一次元変換を適用するために固定小数点算術演算を使用することができる(178)。逆ベクトル変換モジュール146が、係数の行列の行ベクトルに対して変換を適用するときに、逆ベクトル変換モジュール146は、中間係数のベクトルで係数の行ベクトルの中の元の係数を置換することができる。逆ベクトル変換モジュール146が、係数の行列の行ベクトルに対して変換を適用した後に、逆ベクトル変換モジュール146は、行カウンタを増分する(increment)ことができる(180)。逆ベクトル変換モジュール146は、次いでループバックし、この場合にも行カウンタが最大行カウンタよりも小さいかどうかを決定することができる(176)。
行カウンタが、最大行カウンタよりも小さくない(すなわち、それより大きいか、あるいはそれに等しい)(176の「NO」の)場合、逆ベクトル変換モジュール146は、列カウンタが、最大列カウンタよりも小さいかどうかを決定することができる(182)。最初に、列カウンタは、ゼロに設定されることができる。最大列カウンタは、係数の行列の中の列の数に等しい静的な値とすることができる。例えば、係数の行列が、8つの列を含む場合、最大列カウンタは、8に等しい。
列カウンタが、最大列カウンタよりも小さい(182の「YES」の)場合、逆ベクトル変換モジュール146は、列カウンタにより指し示される中間係数の行列の列ベクトルに対して一次元変換を適用することができる(184)。逆変換モジュール34が、中間係数の列ベクトルに対して変換を適用するときに、逆変換モジュール34は、変換された係数のベクトルで列ベクトルの中の中間係数を置換する。
逆ベクトル変換モジュール146が、係数の行列の列ベクトルに対して変換を適用した後に、逆ベクトル変換モジュール146は、列カウンタを増分することができる(186)。逆ベクトル変換モジュール146は、次いでループバックし、この場合にも列カウンタが最大列カウンタよりも小さいかどうかを決定することができる(182)。
列カウンタが、最大列カウンタよりも小さくない(すなわち、それよりも大きいか、あるいはそれに等しい)(182の「NO」の)場合、右シフトモジュール148は、行列の中の変換された係数のおのおのを右シフトすることができる(188)。右シフトモジュール148が、係数を右シフトするときに、右シフトモジュール148は、位置のある種の数だけ係数を右にシフトすることができる。行列の中の第2の中間係数のおのおのを右シフトした結果は、調整された値の行列である。右シフトモジュール148が、変換された係数のおのおのを右シフトした後に、クリッピングモジュール150は、調整された係数が、ピクセル成分値についての適切な範囲内にあることを保証するために調整された係数をクリップすることができる(190)。例えば、クリッピングモジュール150は、調整された係数が、−256から255の範囲内にあることを保証するために調整された係数をクリップすることができる。クリッピングモジュール150が、調整された係数をクリップすることを完了するときに、出力モジュール152は、ピクセル成分値の、結果として生ずる行列を出力することができる(192)。
図8は、順方向変換モジュール26の例示の詳細を示すブロック図である。図8の例に示されるように、順方向変換モジュール26は、成分抽出モジュール24からピクセル成分値の行列を受け取る入力モジュール210を備える。入力モジュール210が、ピクセル成分値の行列を受け取るときに、入力モジュール210は、ピクセル成分値の行列を左シフトモジュール212へと供給することができる。左シフトモジュール212は、順方向ベクトル変換モジュール214が、順方向変換を実行しながら使用する値の中で使用される仮数ビットの数から、順方向変換を実行することにより移動される仮数ビットの数を差し引いたものだけ、ピクセル成分値の行列の中のピクセル成分値のすべてを左にシフトすることができる。例えば、10個の仮数ビットが、順方向変換を実行しながら値の中で使用され、そして3つの仮数ビットが、順方向離散コサイン変換を実行することにより除去される場合、左シフトモジュール212は、7つの位置だけピクセル成分値を左にシフトすることができる。別の例においては、3つの仮数ビットが、順方向変換を実行しながら値の中で使用され、そして3つの仮数ビットが順方向変換を実行することにより除去される場合、左シフトモジュール212は、ゼロ個の位置だけピクセル成分値を左にシフトすることができる。
左シフトモジュール212が、ピクセル成分値をシフトした後に、順方向ベクトル変換モジュール214は、中間値の行列を生成するために、ピクセル成分値の行列の中の各列ベクトルに対して順方向変換を適用することができる。次に、順方向ベクトル変換モジュール214は、変換された係数の行列を生成するために、中間値の行列の中の各行ベクトルに対して順方向変換を適用することができる。順方向ベクトル変換モジュール214が、ベクトルに対して順方向変換を適用するときに、順方向ベクトル変換モジュール214は、以下で図12に説明される順方向変換を適用することができる。以下で図12に説明される変換は、図11に説明される変換の逆であることに注意すべきである。
順方向ベクトル変換モジュール214が、変換された係数の行列を生成した後に、スケーリングモジュール216は、変換された係数の行列の中の変換された各係数に対してスケーリングファクタを適用することができる。スケーリングモジュール216は、逆変換モジュール48の中のスケーリングモジュール142によって使用されるスケーリングファクタの逆数を適用することができる。例えば、1つまたは複数の値が、変換の効率を改善するために変換から除外された場合、これらの値は、スケールファクタの行列の基底(basis)になり得る。変換された係数の行列の中の係数は、これらの値により係数を乗算することによって訂正されることができる。
丸め誤差を低減させるために、順方向変換モジュール26の中の係数バイアシングモジュール218は、スケール変更された係数の行列の中の係数に対して中間バイアス値と補足バイアス値とを加算することができる。変換された係数の行列の中の係数に対して符号適応バイアス値またはディザリングバイアス値を加算することは、逆変換モジュール48の中の係数バイアシングモジュール144が、符号適応バイアス値またはディザリングバイアス値を加算するときと類似した効果を有する。すなわち、係数に対するバイアス値の加算は、正の誤差および負の誤差が、平均して、大きさが等しくなるように、そして平均してゼロの周りで対称になるようにする。これらの誤差は、精度に無関係に、スケール変更された係数の行列の中の係数の限られた精度の固定小数点表現を第1の大きさだけ右シフトすることからもたらされる値と、スケール変更された係数の行列の中の係数を2の第1の大きさのべき乗により除算することからもたらされる値と、の間の差を表す。
係数バイアシングモジュール218が、バイアスされた係数の行列を生成した後に、順方向変換モジュール26の中の右シフトモジュール220は、バイアスされた係数の行列の中の係数を右シフトすることにより出力係数の行列を生成することができる。右シフトモジュール220は、バイアスされた係数の行列の係数における仮数ビットの数に、変換を実行することにより係数に加算されるビットの数を加えたものだけ、バイアスされた係数の行列の中の各係数を右シフトすることができる。
次の式は、係数バイアシングモジュール218が、符号適応バイアス値を加算するときに変換された係数の行列上でのスケーリングモジュール216と、係数バイアシングモジュール218と、右シフトモジュール220との影響を要約したものである。
F[ν][u]=(F’[ν][u]*S[ν][u]+(1<<(P+Q)−((F’[ν][u]>=0)?0:1))>>(P+Q)
ここで、ν=0..7、u=0..7であり、ここで、S[ν][u]は、スケールファクタの行列におけるエントリであり、Fは、スケール変更された係数の行列であり、F’は、変換された係数の行列であり、Pは、変換された係数の行列の中の係数における仮数ビットの数を指し示し、そしてQは、変換を適用することにより、変換された係数の行列の中の係数に対して加算されるビットの数を指し示す。
次の式は、係数バイアシングモジュール218が、ディザリングバイアス値を加算するときに、変換された係数の行列上でのスケーリングモジュール216と、係数バイアシングモジュール218と、右シフトモジュール220との影響を要約したものである。
F[ν][u]=(F’[ν][u]*S[ν][u]+(1<<19)−(dither(0:1))>>20
ここで、ν=0..7、u=0..7であり、ここで、S[ν][u]は、スケールファクタの行列におけるエントリであり、Fは、スケール変更された係数の行列であり、F’は、変換された係数の行列である。
スケーリングモジュール216が、スケール変更された係数の行列を生成した後に、出力モジュール222は、係数の行列を量子化モジュール28に対して出力することができる。
図9は、順方向変換モジュール26の例示のオペレーションを示すフローチャートである。最初に入力モジュール210は、ピクセル成分値の行列を受け取る(230)。入力モジュール140が、ピクセル成分値の行列を受け取るときに、左シフトモジュール212は、ピクセル成分値の行列の中の各値を左シフトすることにより、調整された係数の行列を生成することができる(232)。例えば、左シフトモジュール212は、係数のすべてを10個の位置だけ左にシフトすることができる。この例においては、順方向ベクトル変換モジュール214が、数が小数部分に10ビットを使用して符号化される固定小数点算術演算を使用することができるので、左シフトモジュール212は、係数のすべてを10個の位置だけ右にシフトすることができる。したがって、係数を10個の位置だけ左にシフトすることにより、左シフトモジュール212は、10個の仮数ビットを有する固定小数点数へとピクセル成分値を効果的に変換する。
調整された値の行列の中の各ピクセル成分値を左シフトした後に、順方向ベクトル変換モジュール214は、列カウンタが、最大カウンタよりも小さいかどうかを決定することができる(234)。最初に、列カウンタは、ゼロに設定されることができる。最大列カウンタは、調整された係数の行列の中の列の数に等しい静的な値とすることができる。例えば、調整された係数の行列が、8つの列を含む場合、最大列カウンタは、8に等しい。
列カウンタが、最大列カウンタよりも小さい(234の「YES」の)場合、順方向ベクトル変換モジュール214は、列カウンタによって指し示される列ベクトルに対する一次元順方向変換を計算することができる(236)。順方向ベクトル変換モジュール214が、調整された係数の行列の列ベクトルに対する順方向変換を計算するときに、順方向ベクトル変換モジュール214は、列ベクトルの中の元の調整された係数を中間係数で置換する。順方向ベクトル変換モジュール214が、調整された係数の行列の列ベクトルに対する順方向変換を計算した後に、順方向ベクトル変換モジュール214は、列カウンタを増分することができる(238)。順方向ベクトル変換モジュール214は、次いでループバックし、そしてこの場合にも列カウンタが、最大列カウンタよりも小さいかどうかを決定することができる(234)。
列カウンタが、最大列カウンタよりも小さくない(すなわち、それよりも大きいか、あるいはそれに等しい)(234の「NO」の)場合、順方向ベクトル変換モジュール214は、行カウンタが、最大行カウンタよりも小さいかどうかを決定することができる(240)。最初に、行カウンタは、ゼロに設定されることができる。最大行カウンタは、係数の行列の中の行ベクトルの数に等しい静的な値とすることができる。例えば、係数の行列が、8つの行を含む場合、最大行カウンタは、8に等しい。
行カウンタが、最大行カウンタよりも小さい(240の「YES」の)場合、順方向ベクトル変換モジュール214は、行カウンタによって指し示される行ベクトルに対する一次元離散コサイン変換を計算することができる(242)。順方向ベクトル変換モジュール214が、行列の行ベクトルに対する順方向変換を既に計算しているので、係数の行列は、今や中間係数を含んでいる。順方向ベクトル変換モジュール214が、中間係数の行ベクトルに対する順方向変換を計算するときに、順方向ベクトル変換モジュール214は、列ベクトルの中の中間係数を変換された係数で置換する。
順方向ベクトル変換モジュール214が、係数の行列の行ベクトルに対する離散コサイン変換を計算した後に、順方向ベクトル変換モジュール214は、行カウンタを増分することができる(244)。順方向ベクトル変換モジュール214は、次いでループバックし、この場合にも行カウンタが最大行カウンタよりも小さいかどうかを決定することができる(240)。
行カウンタが、最大行カウンタよりも小さくない(すなわち、それよりも大きいか、あるいはそれに等しい)(240の「NO」の)場合、スケーリングモジュール216は、変換された係数の行列の中の変換された各係数をスケール変更することができる(246)。スケーリングモジュール216が、スケール変更された係数の行列を生成した後に、係数バイアシングモジュール218は、スケール変更された係数の行列の中の係数に対して1つまたは複数のバイアス値を加算することにより、バイアスされた係数の行列を生成することができる(248)。例えば、係数バイアシングモジュール218は、スケール変更された係数の行列の中の各係数に対して中間バイアス値と、符号適応バイアス値またはディザリング補足バイアス値とを加算することができる。次に右シフトモジュール220は、バイアスされた係数の行列の中の各係数を右シフトすることができる(250)。右シフトモジュール220は、係数のおのおのにおける仮数ビットの数と、変換を適用することにより係数に対して加算されるビットの数とを加えたものだけ、各係数を右シフトすることにより、調整された係数の行列を生成することができる。右シフトモジュール220が、調整された係数の行列を生成した後に、出力モジュール222は、調整された係数の、結果として生ずる行列を出力することができる(252)。
図10は、第1の例示の一次元変換260を示す図である。図10の例に示されるように、変換260は、入力として値XからXを取ることができる。値XからXは、入力係数行列の1つの行または列の係数を表すことができる。変換260は、値xからxを出力することができる。値XからXが、入力係数行列の中の係数の行の中の値であるときに、値xからxは、中間値の行を表すことができる。値XからXが、係数の列の中の値であるときに、値xからxは、シフトされたピクセル成分値の列を表すことができる。図10の例に示されるように、「+」シンボルを取り囲む円は、加算演算を指し示し、「X」シンボルを取り囲む円は、乗算演算を指し示す。文字/数字の組合せは、値が乗算される値を指し示す。例えば、線x上で、「A1」シンボルは、「X」シンボルを取り囲む円上に配置される。これは、線X上の値が、値A1により乗算されることを指し示す。
変換260は、1組の「バタフライ構造演算」を含んでいる。「バタフライ構造演算」は、第1の出力値uが、第1の中間値を作成するために第1のファクタCにより第1の入力値xを乗算することと、第2の中間値を作成するために第2のファクタSにより第2の入力値yを乗算することと、次いで第1の中間値と第2の中間値とを加算することとにより計算されるソフトウェア構造またはハードウェア構造とすることができる。このより複雑な「バタフライ構造演算」においては、第2の出力値νは、第3の中間値を作成するために第1のファクタにより第2の入力値yを乗算することと、第4の中間値を作成するために第2のファクタSにより第1の入力値xを乗算することと、次いで第4の中間値から第3の中間値を差し引くこととにより計算されることができる。次の式は、「バタフライ構造演算」の数学的結果を要約している。
u=x*C+y*S、
ν=x*S−y*C。
バタフライ構造演算264は、変換260において使用される1つのバタフライ構造演算を示す。バタフライ構造演算は、バタフライ構造演算が、第1の入力値から第2の入力値へ、そして第2の入力値から第1の入力値への値のクロスオーバー(crossover)のために、2つの「翼(wing)」を有するように見えることに起因してこの名前を有する。
変換260において使用されるように、第1のファクタCと第2のファクタSとは、無理数とすることができる。例えば、Cは、
Figure 0005661836
に等しくすることができ、Sは、
Figure 0005661836
に等しくすることができる。逆ベクトル変換モジュール146は、16−ビットのレジスタにおける固定小数点算術演算を使用することができるので、そしてCおよびSは、多くの場合に無理数であるので、CおよびSにより入力値xおよびyを乗算することは、計算上、不都合な可能性がある。この理由から、逆ベクトル変換モジュール146は、CおよびSに対して有理数近似値を使用することができる。これらの整数近似値は、形式(form)(C’/2)および(S’/2)のものとすることができ、ここでC’およびS’は、CおよびSの「整数化された(integerized)」バージョンであり、jおよびkは、整数である。例えば、
Figure 0005661836
としよう。この例においては、逆ベクトル変換モジュール146は、
Figure 0005661836
であるので、
Figure 0005661836
を近似するために、整数値C’=2217と、j=12とを使用することができる。この例においては、0.5411961が、0.541259766にほぼ等しいことは明らかである。したがって、形式(form)、
u=x*C+y*S、
ν=x*S−y*C、
の計算は、形式、
u’=x*(C’/2)+y*(S’/2)、
ν’=x*(S’/2)−y*(C’/2)、
の計算によって置換されることができる。これらの計算をさらに簡略化するために、2および2による除算演算は、次のように「>>」シンボルを使用して示されるj個およびk個の位置だけのビットごとの右シフト演算によって置換されることができる。
u’’=((x*C’)>>j)+((y*S’)>>k)、
ν’’=((x*S’)>>k)−((y*C’)>>j)。
しかしながら、DC係数に対してバイアス値を加算することに関して上記で論じられるように、ビットごとの右シフト演算により除算演算を置換することは、u’とu’’との間の、そしてν’とν’’との間の、差をもたらす可能性がある。これらの計算における項に対して中間バイアス値を加算することは、u’とu’’との間の、そしてν’とν’’との間の、差を低減させることができる。中間バイアス値が、加算されるときに、計算は、次の形式を取ることができる。
u’’’=((x*C’+(1<<(j−1))>>j)+((y*S’+(1<<(k−1))>>k)、
ν’’’=((x*S’+(1<<(k−1))>>k)−((y*C’+(1<<(j−1))>>j)。
中間バイアス値の加算は、uとu’’’との間の、そしてνとν’’’との間の差よりも小さいuとu’’’との間の、そしてνとν’’’との間、の差をもたらす可能性があるが、中間バイアス値の加算は、バタフライ構造演算に対して計算的な複雑さを追加する可能性がある。さらに、中間バイアス値の加算は、16−ビットのレジスタにおいて固定小数点算術演算を使用するときにu’’’とν’’’との計算を非現実的にする可能性がある。中間バイアス値の加算は、中間バイアス値の加算が、右シフトの前に行われるので、u’’’とν’’’との計算を非現実的にする可能性があり、そしてその結果として、レジスタオーバーフロー(register overflow)をもたらす可能性がある。
ν=x*S−y*Cと、ν’’=((x*S’)>>k)−((y*C’)>>j)との間の平均的な差は、ほぼゼロである。換言すれば、すべての値xおよびyについてのすべての値(ν’’−ν)の平均は、ほぼゼロに等しい。さらに、ν=x*S−y*Cとν’’’=((x*S’+(1<<(k−1))>>k)−((y*C’+(1<<(j−1))>>j)との間の平均的な差もまた、ほぼゼロである。これは、ν’’とν’’’とが、常にほぼ等しいからである。ν’’とν’’’とは、jがkに等しいときに、中間バイアス値が、引き算、
Figure 0005661836
によって打ち消されるので、常にほぼ同等なものであり、ここで、mは、中間バイアス値を表す。この例が示すように、jがkに等しいときに(m/2)から(m/2)を差し引くことは、中間バイアス値mを打ち消し合う。νとν’’との間の平均的な差が、ほぼゼロであるので、逆ベクトル変換モジュール146は、ν’’’の代わりにν’’を計算することにより生成される値に正または負のバイアスを体系的に導入することはなく、そしてν’’とν’’’とが、ほぼ等しいので、逆ベクトル変換モジュール146は、ν’’’の代わりにν’’を使用することができる。
u=x*C+y*Sと、u’’’=((x*C’+(1<<(j−1))>>j)+((y*S’+(1<<(k−1))>>k)との間の平均的な差もまた、ほぼゼロに等しい。同時に、u=x*C+y*Sと、u’’=((x*C’)>>j)+((y*S’)>>k)と、の間の差は、ほぼゼロに等しくはない。もっと正確に言えば(rather)、uとu’’との間の平均的な差は、ほぼ−1/2である。したがって、u’’とu’’’とは、ほぼ等しくはない。次式のように、jがkに等しいときでさえ、中間バイアス値が、打ち消し合われないので、u’’とu’’’とは、ほぼ等しくはない。
Figure 0005661836
u’’は、u’’’にほぼ等しくはないので、u’’は、u’’’の代わりに使用されることができない。u’’’の代わりにu’’を使用しようと試みることは、uからのかなりの差をもたらす可能性がある。
あらゆる計算に対して中間バイアス値を加算することに関連する複雑さとオーバーフローの問題を回避するために、次の式が、u’’’およびu’’の代わりに使用されることができる。
u’’’’=((x*C’)>>j)−((y*-S’)>>k)
u’’’’において、S’の負のバージョンが使用され、そして((y*-S’)>>k)が、差し引かれる点以外は、u’’’’は、u’’に等しい。u’’’と同様に、u’’’’は、中間バイアス値を加算しない。しかしながら、u’’’とは異なって、u’’’’とuとの間の差は、0の周りに集中している。u’’’’とuとの間の差が、ゼロの周りに集中しているので、丸め誤差は、後続のバタフライ構造演算の適用を介して拡大されない。この理由のために、逆ベクトル変換モジュール146は、バタフライ構造演算においてuを計算するためにu’’’’を使用することができる。この理由のために、jがkに等しいときに、変換260を適用するために逆ベクトル変換モジュール146によって使用されるバタフライ構造演算は、次の形式を有することができる。
u’’’’=((x*C’)>>j)−((y*-S’)>>k)、
ν’’’=((x*S’)>>k)−((y*C’)>>j)。
したがって、このタイプのバタフライ構造演算によって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、1以下の正または負の大きさを有する。
代わりに、jが、kに等しいときに、逆ベクトル変換モジュール146は、右シフトが、バタフライ構造演算、
Figure 0005661836
の最後まで遅らせられているバタフライ構造演算を使用することもできる。バタフライ構造演算の最後まで右シフトを遅らせることは、バタフライ構造演算を実行するために必要とされるシフト演算の全体的な数を低減させることができ、そして精度を改善することができる。さらに、ほとんどの現代の16−ビットの単一命令多重データ(single instruction multiple data)(「SIMD」)プロセッサと、デジタル信号プロセッサと、の上で使用可能な4−ウェイ乗加算命令(4-way multiply-accumulate instructions)は、効率的にuおよびνを計算するために使用されることができる。
乗算オペレーションは、加算、減算、およびビットごとのシフト演算に対して計算的に高くつく可能性がある。この理由のために、乗算演算と同じ効果を有する一連の加算、減算、およびビットごとのシフト演算を使用することは、より簡単とすることができる。例えば、C’=2217であるものと仮定する。この例においては、r=x*C’は、次のステップ、
x2=(x<<3)−x、
x3=x+(x2<<6)、
x4=x3−x2、
r=x3+(x4<<2)、
で置換されることができる。この例において、x2、x3、およびx4は、中間値である。これを示すために、x=1である場合の例、
7=(1<<3)−1、
449=1+(7<<6)、
442=449−7、
2217=449+(442<<2)、
2217=(1*2217)=(x*2217、ここでx=1)、
を考察する。この例においては、1*2217=2217であり、そしてx=1であるときにこのシーケンス演算によって生成される値は、2217である。
次の表は、逆ベクトル変換モジュール146が、定数ファクタA1、A2、B1、B2、C1、C2、D1、およびD2のために使用することができる整数値近似の一例の組を要約している。
Figure 0005661836
表1において、「整数値」の列の中の値は、212=4096によって除算されるときの「元の値」の列の中の値を近似したものである。例えば、
Figure 0005661836
である。同様に、
Figure 0005661836
である。「積を計算するためのアルゴリズム」の列の中の式は、逆ベクトル変換モジュール146が、対応する整数値による乗算演算の代わりに使用することができる方法を要約したものである。
図11は、第2の例示のアルゴリズム270を示す図である。図10におけるように、値X、X、X、X、X、X、X、およびXは、入力係数を表し、そして値x、x、x、x、x、x、x、およびxは、出力値を表す。「+」シンボルを取り囲む円の後の線に関連する値は、円を指す矢印に関連する値を加算することの結果である。「x」シンボルを取り囲む円の後の線に関連する値は、円の次に配置される係数と、円を通過する線に関連する値とを乗算することの結果である。矢印の次のシンボル「−」は、矢印に関連する値の否定を表す。例えば、値「10」が、「−」シンボルの前の矢印に関連づけられる場合、値「-10」は、「−」シンボルの後の矢印に関連づけられる。さらに、否定された係数と減算とを使用して丸め誤差を低減させるように上記に説明される技法は、アルゴリズム190において使用されることができることに注意すべきである。
変換270において、
Figure 0005661836
の値は、有理分数(rational fraction)を使用して近似されることができる。例えば、α、β、γ、δ、ε、およびζの値は、以下の表2にリストアップされる整数近似を使用して近似されることができる。
Figure 0005661836
表2において、「整数近似」の列の中の値は、「元の値」の列の中の値の整数化されたバージョンを表す。例えば、
Figure 0005661836
である。表2の「積を計算するためのアルゴリズム」の列の中の式は、逆ベクトル変換モジュール146が、「整数近似」の列の中の値による乗算演算の代わりに使用することができるアルゴリズムを表す。
図12は、順方向ベクトル変換モジュール214によって使用されることができる例示の変換200を示す流れ図である。図12において、値X、X、X、X、X、X、X、およびXは、出力係数を表し、そして値x、x、x、x、x、x、x、およびxは、入力値を表す。さらに、否定された係数と、減算とを使用して丸め誤差を低減させるために、上記に説明される技法は、変換270において使用されることができることに注意すべきである。
図12の例において、
Figure 0005661836
の値は、有理分数を使用して近似されることができる。例えば、α、β、γ、δ、ε、およびζの値は、表2にリストアップされる整数近似を使用して近似されることができる。
ここにおいて説明される本技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せの形でインプリメントされることができる。モジュールまたはコンポーネントとして説明される任意の機能は、集積化された論理デバイスにおいて一緒に、あるいは個別の、但し相互運用可能な論理デバイスとして別々にインプリメントされることができる。ソフトウェアの形でインプリメントされる場合、本技法は、実行されるときに、上記に説明される1つまたは複数の方法を実行する命令を備えるコンピュータ可読媒体により少なくとも部分的に実現されることができる。コンピュータ可読媒体は、コンピュータプログラムプロダクト(computer program product)の一部分を形成することができ、このコンピュータプログラムプロダクトは、パッケージング材料を含むことができる。コンピュータ可読媒体は、シンクロナスダイナミックランダムアクセスメモリ(synchronous dynamic random access memory)(SDRAM)、読取り専用メモリ(read-only memory)(ROM)、不揮発性ランダムアクセスメモリ(non-volatile random access memory)(NVRAM)、電気的消去可能プログラマブル読取り専用メモリ(electrically erasable programmable read-only memory)(EEPROM)、フラッシュメモリ(FLASH memory)、磁気または光学的データストレージ媒体などのランダムアクセスメモリ(random access memory)(RAM)を備えることができる。本技法は、追加して、または代わりに、命令またはデータ構造の形態において符号を搬送し、あるいは通信し、そしてコンピュータによりアクセスされ、読み取られ、かつ/または実行されることができるコンピュータ可読通信媒体により、少なくとも部分的に実現されることもできる。
その符号は、1つまたは複数のデジタル信号プロセッサ(digital signal processor)(DSP)、汎用マイクロプロセッサ(general purpose microprocessor)、特定用途向け集積回路(application specific integrated circuit)(ASIC)、フィールドプログラマブル論理アレイ(field programmable logic array)(FPGA)、または他の同等な集積化された、または個別の論理回路など、1つまたは複数のプロセッサにより実行されることができる。したがって、ここにおいて使用されるような用語「プロセッサ」は、ここにおいて説明される技法のインプリメンテーションのために適した前述の構造または他の任意の構造のうちの任意のものを意味することができる。さらに、いくつかの態様においては、ここにおいて説明される機能は、符号化することと、復号することとのために構成され、あるいは組み合わされたビデオエンコーダデコーダ(video encoder-decoder)(CODEC)の中に組み込まれた専用のソフトウェアモジュールまたはハードウェアモジュールの内部に提供されることができる。
本発明の様々な実施形態が、説明されてきている。これらおよび他の実施形態は、添付の特許請求の範囲の範囲内にある。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
[C1]
変換された係数のベクトルを生成するために、ソース係数のベクトルに対して変換を適用するように、固定小数点数に対して一連のバタフライ構造演算を使用することと、
なお、変換された係数の前記ベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数の前記ベクトルを変換することにより生成されることになる値の近似値である;
変換された係数の前記ベクトルの中の変換された係数に基づいて、メディアプレゼンテーションユニットが、可聴信号または可視信号を出力するようにすることと、
なお、前記バタフライ構造演算のうちの1つによって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである;
を備える方法。
[C2]
前記一連の前記バタフライ構造演算を使用することは、形式、
u=((x*C)>>k)−((y*-S)>>k’)、
ν=((x*S)>>k’)−((y*C)>>k)、
のバタフライ構造演算を実行すること、を備え、
なお、uおよびνは、結果として生ずる固定小数点数であり、
C、S、kおよびk’は、定数の整数であり、
xおよびyは、固定小数点変数であり、そして
C/2 およびS/2 ’は、無理数定数の有理数近似値である、
C1に記載の方法。
[C3]
ソース係数の前記ベクトルは、8つの係数、x 、x 、x 、x 、x 、x 、x 、およびx 、から構成され、
変換された係数の前記ベクトルは、8つの係数、z 、z 、z 、z 、z 、z 、z 、およびz 、から構成され、そして
前記バタフライ構造演算のうちの任意のものを実行することは、
Figure 0005661836
である第1のバタフライ構造演算を実行することと、
Figure 0005661836
である第2のバタフライ構造演算を実行することと、
Figure 0005661836
である第3のバタフライ構造演算を実行することと、
Figure 0005661836
である第4のバタフライ構造演算を実行することと、
Figure 0005661836
である第5のバタフライ構造演算を実行することと、
Figure 0005661836
である第6のバタフライ構造演算を実行することと、
Figure 0005661836
である第7のバタフライ構造演算を実行することと、
Figure 0005661836
である第8のバタフライ構造演算を実行することと、
Figure 0005661836
である第9のバタフライ構造演算を実行することと、
Figure 0005661836
である第10のバタフライ構造演算を実行することと、
Figure 0005661836
である第11のバタフライ構造演算を実行することと、
Figure 0005661836
である第12のバタフライ構造演算を実行することと、
Figure 0005661836
である第13のバタフライ構造演算を実行することと、
を備える、
C2に記載の方法。
[C4]
α、β、γ、δ、ε、およびζは、それぞれ、無理数値
Figure 0005661836
の近似値である、C3に記載の方法。
[C5]
α=8867/16384、β=21407/16384、γ=5681/4096、δ=565/2048、ε=9633/8192、ζ=12873/16384である、C4に記載のデバイス。
[C6]
前記一連のバタフライ構造演算を使用することは、前記バタフライ構造演算の中の乗算演算を実行することによりもたらされることになる値、を近似する結果として生ずる値、を生成する一連のシフト演算と、加算演算と、減算演算とを使用すること、を備える、C2に記載のデバイス。
[C7]
入力係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成することと、
スケール変更された係数の前記行列のDC係数に対して1つまたは複数のバイアス値を加算することにより、ソース係数の前記ベクトルを含むバイアスされた係数の行列を生成することと、
中間係数の行列を生成するために、係数の前記行列の中の各行ベクトルに対して前記変換を適用するように、固定小数点数に対して前記一連のバタフライ構造演算を使用することと、
変換された係数の行列を生成するために、中間係数の前記行列の中の各列ベクトルに対して前記変換を適用するように、固定小数点数に対して前記一連のバタフライ構造演算を使用することと、
変換された係数の前記行列の中の係数を第1の大きさだけ右シフトすることによりピクセル成分値の行列を生成することと、
をさらに備えるC1に記載の方法。
[C8]
バイアスされた係数の前記行列を生成することは、スケール変更された係数の前記行列の前記DC係数に対して中間バイアス値を加算すること、を備え、
前記中間バイアス値は、2 (P+T−1) に等しく、なお、Pは、前記第1の大きさに等しく、Tは、前記変換を実行することにより加算されるビットの数である、
C7に記載の方法。
[C9]
バイアスされた係数の前記行列を生成することは、スケール変更された係数の前記行列の前記DC係数に対して補足バイアス値を加算すること、を備え、
前記DC係数に対する前記補足バイアス値の前記加算は、正の誤差および負の誤差が、平均して大きさが等しくなるように、そして平均してゼロの周りで対称になるようにし、
前記誤差は、精度に無関係に、変換された係数の前記行列の中の係数の限られた精度の固定小数点表現を前記第1の大きさだけ右シフトすることからもたらされる値と、変換された係数の前記行列の中の前記係数を2 によって除算することからもたらされる値と、の間の差を表し、なお、Pは、前記第1の大きさに等しい、
C8に記載の方法。
[C10]
前記補足バイアス値は、前記DC係数が負であるときに、−1に等しく、前記DC係数が負でないときに、0に等しい、C9に記載の方法。
[C11]
擬似ランダムベースで、−1または0のいずれかに等しい値を選択すること、をさらに備え、
前記補足バイアス値を加算することは、前記選択された値を加算すること、を備える、
C9に記載の方法。
[C12]
スケール変更された係数の前記行列を生成することは、入力係数の前記行列の中の各係数を第2の大きさだけ左シフトすること、を備え、
前記変換を適用するように前記一連のバタフライ構造演算を使用することは、変換された係数の前記行列の中の各係数が、第3の大きさにより測定される精度の余分なビットの数を含むようにし、
前記第1の大きさは、前記第2の大きさと前記第3の大きさとを加えたものに等しい、
C7に記載の方法。
[C13]
前記第2の大きさは、前記変換を適用しながら使用される前記固定小数点数の仮数ビットの数に等しい、C12に記載の方法。
[C14]
前記第2の大きさは、3であり、そして
入力係数の前記行列を仮定すると、前記ピクセル成分値は、電気電子技術者協会(IEEE)1180規格の精度要件を満たす、
C13に記載の方法。
[C15]
ピクセル成分値の前記行列の中にピクセル成分値を含むピクセルを構築することと、
ディスプレイユニットが、前記ピクセルを表示するようにすることと、
をさらに備えるC7に記載の方法。
[C16]
前記固定小数点数は、16−ビットの固定小数点数である、C1に記載の方法。
[C17]
変換された係数のベクトルを生成するために、ソース係数のベクトルに対して変換を適用するように、固定小数点数に対して一連のバタフライ構造演算を使用する逆変換モジュール、を備え、
変換された係数の前記ベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数の前記ベクトルを変換することにより生成されることになる値の近似値であり、
メディアプレゼンテーションユニットは、変換された係数の前記ベクトルの中の変換された係数に基づいて可聴信号または可視信号を提示することができ、
前記バタフライ構造演算のうちの1つによって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、正の差と負の差とは、ほぼ等しい大きさである、
デバイス。
[C18]
前記逆変換モジュールによって実行される前記バタフライ構造演算のうちの前記1つは、形式、
u=((x*C)>>k)−((y*-S)>>k’)、
ν=((x*S)>>k’)−((y*C)>>k)、
であり、
なお、uおよびνは、結果として生ずる固定小数点値であり、
C、S、kおよびk’は、定数の整数であり、
xおよびyは、固定小数点変数であり、そして
C/2 およびS/2 ’は、無理数定数の有理数近似値である、
C17に記載のデバイス。
[C19]
ソース係数の前記ベクトルは、8つの係数、x 、x 、x 、x 、x 、x 、x 、およびx 、から構成され、
変換された係数の前記ベクトルは、8つの係数、z 、z 、z 、z 、z 、z 、z 、およびz 、から構成され、そして
前記逆変換モジュールは、
Figure 0005661836
である第1のバタフライ構造演算を実行することと、
Figure 0005661836
である第2のバタフライ構造演算を実行することと、
Figure 0005661836
である第3のバタフライ構造演算を実行することと、
Figure 0005661836
である第4のバタフライ構造演算を実行することと、
Figure 0005661836
である第5のバタフライ構造演算を実行することと、
Figure 0005661836
である第6のバタフライ構造演算を実行することと、
Figure 0005661836
である第7のバタフライ構造演算を実行することと、
Figure 0005661836
である第8のバタフライ構造演算を実行することと、
Figure 0005661836
である第9のバタフライ構造演算を実行することと、
Figure 0005661836
である第10のバタフライ構造演算を実行することと、
Figure 0005661836
である第11のバタフライ構造演算を実行することと、
Figure 0005661836
である第12のバタフライ構造演算を実行することと、
Figure 0005661836
である第13のバタフライ構造演算を実行することと、
により、前記バタフライ構造演算を実行する、
C18に記載のデバイス。
[C20]
α、β、γ、δ、ε、およびζは、それぞれ、無理数値
Figure 0005661836
の近似値である、C19に記載のデバイス。
[C21]
α=8867/16384、β=21407/16384、γ=5681/4096、δ=565/2048、ε=9633/8192、ζ=12873/16384である、
C20に記載のデバイス。
[C22]
前記逆変換モジュールは、前記バタフライ構造演算の中の乗算演算を実行することによりもたらされることになる値、を近似する結果として生ずる値、を生成する一連のシフト演算と、加算演算と、減算演算とを使用して、前記バタフライ構造演算を実行する、C19に記載のデバイス。
[C23]
前記デバイスは、
入力係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成するスケーリングモジュールと;
スケール変更された係数の前記行列のDC係数に対して1つまたは複数のバイアス値を加算することにより、ソース係数の前記ベクトルを含むバイアスされた係数の行列を生成する係数バイアシングモジュールと、
なお前記逆変換モジュールは、バイアスされた係数の前記行列の中の各行ベクトルに対して前記変換を適用するように前記一連のバタフライ構造演算を使用することにより、中間係数の行列を生成し、
前記逆変換モジュールは、中間係数の前記行列の中の各列ベクトルに対して前記変換を適用するように前記一連のバタフライ構造演算を使用することにより、変換された係数の行列を生成する;
変換された係数の前記行列の中の係数を第1の大きさだけ右シフトすることにより、ピクセル成分値の行列を生成する右シフトモジュールと、
なおどちらか一方の前記逆変換モジュールは、ソース係数の前記ベクトルに対して前記変換を適用するように前記一連のバタフライ構造演算を使用する;
をさらに備える、
C18に記載のデバイス。
[C24]
前記係数バイアシングモジュールは、スケール変更された係数の前記行列の前記DC係数にたいして中間バイアス値を加算し、
前記中間バイアス値は、2 (P+T−1) に等しく、なお、Pは、前記第1の大きさに等しく、Tは、前記変換を実行することにより加算されるビットの数である、
C23に記載のデバイス。
[C25]
前記係数バイアシングモジュールは、スケール変更された係数の前記行列の前記DC係数に対して補足バイアス値を加算し、
前記DC係数に対する前記補足バイアス値の前記加算は、正の誤差および負の誤差が、平均して、大きさが等しくなるように、そして平均してゼロの周りで対称になるようにし、
前記誤差は、精度に無関係に、変換された係数の前記行列の中の係数の限られた精度の固定小数点表現を前記第1の大きさだけ右シフトすることからもたらされる値と、変換された係数の前記行列の中の前記係数を2 によって除算することからもたらされる値と、の間の差を表し、なお、Pは、前記第1の大きさに等しい、
C23に記載のデバイス。
[C26]
前記補足バイアス値は、前記DC係数が負であるときに、−1に等しく、前記DC係数が負でないときに、0に等しい、C25に記載のデバイス。
[C27]
前記係数バイアシングモジュールは、擬似ランダムベースで、−1または0のいずれかに等しい値を選択し、
前記係数バイアシングモジュールは、前記補足バイアス値として前記選択された値を加算する、
C25に記載のデバイス。
[C28]
前記スケーリングモジュールは、入力係数の前記行列の中の各係数を第2の大きさだけ左シフトすることにより、入力係数の前記行列の中の各係数をスケール変更し、
前記逆変換モジュールは、変換された係数の前記行列の中の各係数が、第3の大きさにより測定される精度の余分なビットの数を含むようにし、
前記第1の大きさは、前記第2の大きさと、前記第3の大きさとを加えたものに等しい、
C23に記載のデバイス。
[C29]
前記第2の大きさは、前記変換を適用しながら使用される前記固定小数点数の仮数ビットの数に等しい、C28に記載のデバイス。
[C30]
変換された係数のベクトルを計算するために、ソース係数のベクトルに対して変換を適用するように、固定小数点数に対して一連のバタフライ構造演算を使用するための手段、
を備え、
変換された係数の前記ベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数の前記ベクトルを変換することにより生成されることになる値の近似値であり、
メディアプレゼンテーションユニットは、変換された係数の前記ベクトルの中の前記変換された係数に基づいて可聴信号または可視信号を提示することができ、
前記バタフライ構造演算のうちの1つによって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである、
デバイス。
[C31]
一連のバタフライ構造演算を使用するための前記手段は、バタフライ構造演算を実行するための1組の手段、
を備え、
バタフライ構造演算を実行するための前記手段のおのおのは、形式、
u=((x*C)>>k)−((y*-S)>>k)、
ν=((x*S)>>k)−((y*C)>>k)、
のバタフライ構造演算を実行するための手段を備え、
なお、u、ν、x、およびyは、固定小数点数であり、
xおよびyは、入力値であり、uおよびνは、出力値であり、そして
C、S、およびkは、整数である、
C30に記載のデバイス。
[C32]
ソース係数の前記ベクトルは、8つの係数、x 、x 、x 、x 、x 、x 、x6、およびx 、から構成され、
変換された係数の前記ベクトルは、8つの係数、z 、z 、z 、z 、z 、z 、z 、およびz 、から構成され、そして
バタフライ構造演算を実行するための前記1組の手段は、
Figure 0005661836
である第1のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第2のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第3のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第4のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第5のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第6のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第7のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第8のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第9のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第10のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第11のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第12のバタフライ構造演算を実行するための手段と、
Figure 0005661836
である第13のバタフライ構造演算を実行するための手段と、
を備える、
C31に記載のデバイス。
[C33]
α、β、γ、δ、ε、およびζは、それぞれ、無理数値
Figure 0005661836
の近似値である、C32に記載のデバイス。
[C34]
α=8867/16384、β=21407/16384、γ=5681/4096、
δ=565/2048、ε=9633/8192、ζ=12873/16384である、
C33に記載のデバイス。
[C35]
前記一連のバタフライ構造演算を使用するための前記手段は、前記バタフライ構造演算の中の乗算演算を実行することによりもたらされることになる値、を近似する結果として生ずる値、を生成する一連のシフト演算と、加算演算と、減算演算とを使用して、前記バタフライ構造演算を実行する、C31に記載のデバイス。
[C36]
入力係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成するための手段と、
スケール変更された係数の前記行列のDC係数に対して1つまたは複数のバイアス値を加算することにより、ソース係数の前記ベクトルを含むバイアスされた係数の行列を生成するための手段と、
バイアスされた係数の前記行列の中の各行ベクトルに対して前記変換を適用するように、前記一連のバタフライ構造演算を使用することにより、中間係数の行列を生成するための手段と、
中間係数の前記行列の中の各列ベクトルに対して前記変換を適用するように、前記一連のバタフライ構造演算を使用することにより、変換された係数の行列を生成するための手段と、
変換された係数の前記行列の中の係数を第1の大きさだけ右シフトすることによりピクセル成分値の行列を生成するための手段と、
をさらに備え、
中間係数の前記行列を生成するための前記手段、または変換された係数の前記行列を生成するための前記手段のいずれかは、ソース係数の前記ベクトルに対して前記変換を適用するように前記一連のバタフライ構造演算を使用するための前記手段を備える、
C30に記載のデバイス。
[C37]
バイアスされた係数の前記行列を生成するための前記手段は、スケール変更された係数の前記行列の前記DC係数に対して中間バイアス値を加算するための手段、を備え、
前記中間バイアス値は、2 (P+T−1) に等しく、なおPは、前記第1の大きさに等しく、Tは、前記変換を実行することにより加算されるビットの数である、
C36に記載のデバイス。
[C38]
バイアスされた係数の前記行列を生成するための前記手段は、スケール変更された係数の前記行列の前記DC係数に対して補足バイアス値を加算するための手段、を備え、
前記DC係数に対する前記補足バイアス値の前記加算は、正の誤差および負の誤差が、平均して大きさが等しくなるように、そして平均してゼロの周りで対称になるようにし、
前記誤差は、精度に無関係に、変換された係数の前記行列の中の係数の限られた精度の固定小数点表現を前記第1の大きさだけ右シフトすることからもたらされる値と、変換された係数の前記行列の中の前記係数を2 によって除算することからもたらされる値と、の間の差を表し、なお、Pは、前記第1の大きさに等しい、
C36に記載のデバイス。
[C39]
前記補足バイアス値は、前記DC係数が負であるときに、−1に等しく、前記DC係数が負でないときに、0に等しい、C38に記載のデバイス。
[C40]
擬似ランダムベースで、−1または0のいずれかに等しい値を選択するための手段、を備え、
前記補足バイアス値を加算するための前記手段は、前記選択された値を前記補足バイアス値として加算する、
C38に記載のデバイス。
[C41]
スケール変更された係数の前記行列を生成するための前記手段は、入力係数の前記行列の中の前記係数のおのおのを第2の大きさだけ左シフトすることにより、入力係数の前記行列の中の各係数をスケール変更するための手段、を備え、
前記変換を適用するように前記一連のバタフライ構造演算を使用するための前記手段は、変換された係数の前記行列の中の各係数が、第3の大きさにより測定される精度の余分なビットの数を含むようにし、
前記第1の大きさは、前記第2の大きさと前記第3の大きさとを加えたものに等しい、
C36に記載のデバイス。
[C42]
前記第2の大きさは、前記変換を適用しながら使用される前記固定小数点数の仮数ビットの数に等しい、C41に記載のデバイス。
[C43]
前記第2の大きさは、3であり、そして
入力係数の前記行列を仮定すると、前記ピクセル成分値は、電気電子技術者協会(IEEE)1180規格の精度要件を満たす、
C42に記載のデバイス。
[C44]
前記デバイスは、ピクセル成分値の前記行列の中のピクセル成分値を含むピクセルを構築するための手段、をさらに備え、そして
前記デバイスは、ディスプレイユニットが前記ピクセルを表示するようにするための手段、をさらに備える、
C30に記載のデバイス。
[C45]
前記固定小数点数は、16−ビットの固定小数点数である、C30に記載のデバイス。
[C46]
実行されるときに、プロセッサに、
変換された係数のベクトルを生成するために、係数のベクトルに対して変換を適用するように、固定小数点数に対して一連のバタフライ構造演算を使用させ、
なお、変換された係数の前記ベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数の前記ベクトルを変換することにより生成されることになる値の近似値である;
変換された係数の前記ベクトルの中の変換された値に基づいて、メディアプレゼンテーションユニットに可聴信号または可視信号を出力させる、ことをさせる、
なお、前記バタフライ構造演算のうちの1つによって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである;
命令、
を備えるコンピュータ可読媒体。
[C47]
前記プロセッサに、前記バタフライ構造演算を実行させる前記命令は、前記プロセッサに、形式、
u=((x*C)>>k)−((y*-S)>>k’)、
ν=((x*S)>>k’)−((y*C)>>k)、
のバタフライ構造演算を実行させ、
uおよびνは、結果として生ずる固定小数点数であり、
C、S、kおよびk’は、定数の整数であり、
xおよびyは、固定小数点変数であり、そして
C/2 およびS/2 ’は、無理数定数の有理数近似値である、
C44に記載のコンピュータ可読媒体。
[C48]
ソース係数の前記ベクトルは、8つの係数、x 、x 、x 、x 、x 、x 、x 、およびx 、から構成され、
変換された係数の前記ベクトルは、8つの係数、z 、z 、z 、z 、z 、z 、z 、およびz 、から構成され、
前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記命令は、前記プログラマブルプロセッサに、
Figure 0005661836
である第1のバタフライ構造演算を実行させ、
Figure 0005661836
である第2のバタフライ構造演算を実行させ、
Figure 0005661836
である第3のバタフライ構造演算を実行させ、
Figure 0005661836
である第4のバタフライ構造演算を実行させ、
Figure 0005661836
である第5のバタフライ構造演算を実行させ、
Figure 0005661836
である第6のバタフライ構造演算を実行させ、
Figure 0005661836
である第7のバタフライ構造演算を実行させ、
Figure 0005661836
である第8のバタフライ構造演算を実行させ、
Figure 0005661836
である第9のバタフライ構造演算を実行させ、
Figure 0005661836
である第10のバタフライ構造演算を実行させ、
Figure 0005661836
である第11のバタフライ構造演算を実行させ、
Figure 0005661836
である第12のバタフライ構造演算を実行させ、
Figure 0005661836
である第13のバタフライ構造演算を実行させる、
C47に記載のコンピュータ可読媒体。
[C49]
α、β、γ、δ、ε、およびζは、それぞれ、無理数値
Figure 0005661836
の近似値である、C48に記載のコンピュータ可読媒体。
[C50]
α=8867/16384、β=21407/16384、γ=5681/4096、δ=565/2048、ε=9633/8192、ζ=12873/16384である、C49に記載のコンピュータ可読媒体。
[C51]
前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記命令は、前記プログラマブルプロセッサに、乗算演算を実行することによりもたらされることになる値、を近似する結果として生ずる値、を生成する一連のシフト演算と、加算演算と、減算演算とを使用して、前記バタフライ構造演算において値を乗算させる、C47に記載のコンピュータ可読媒体。
[C52]
前記命令は、さらに前記プログラマブルプロセッサに、
入力係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成させ、
スケール変更された係数の前記行列のDC係数に対して1つまたは複数のバイアス値を加算することにより、ソース係数の前記ベクトルを含むバイアスされた係数の行列を生成させ、
中間係数の行列を生成するために、係数の前記行列の中の各行ベクトルに対して前記変換を適用するように、固定小数点数に対して前記一連のバタフライ構造演算を使用させ、
変換された係数の行列を生成するために、中間係数の前記行列の中の各列ベクトルに対して前記変換を適用するように、固定小数点数に対して前記一連のバタフライ構造演算を使用させ、
変換された係数の前記行列の中の係数を第1の大きさだけ右シフトすることによりピクセル成分値の行列を生成させる、
C46に記載のコンピュータ可読媒体。
[C53]
前記プロセッサに、バイアスされた係数の前記行列を生成させる前記命令は、前記プロセッサに、スケール変更された係数の前記行列の前記DC係数に対して中間バイアス値を加算させ、
前記中間バイアス値は、2 (P+T−1) に等しく、なお、Pは、前記第1の大きさに等しく、Tは、前記変換を実行することにより加算されるビットの数である、
C52に記載のコンピュータ可読媒体。
[C54]
前記プロセッサに、バイアスされた係数の前記行列を生成させる前記命令は、前記プロセッサに、スケール変更された係数の前記行列の前記DC係数に対して補足バイアス値を加算させ、
前記DC係数に対する前記補足バイアス値の前記加算は、正の誤差および負の誤差が、平均して大きさが等しくなるように、そして平均してゼロの周りで対称になるようにし、
前記誤差は、精度に無関係に、変換された係数の前記行列の中の係数の限られた精度の固定小数点表現を前記第1の大きさだけ右シフトすることからもたらされる値と、変換された係数の前記行列の中の前記係数を2 によって除算することからもたらされる値と、の間の差を表し、なお、Pは、前記第1の大きさに等しい、
C52に記載のコンピュータ可読媒体。
[C55]
前記補足バイアス値は、前記DC係数が負であるときに、−1に等しく、前記DC係数が負でないときに、0に等しい、C54に記載のコンピュータ可読媒体。
[C56]
前記命令は、さらに、前記プロセッサに、擬似ランダムベースで、−1または0のいずれかに等しい値を選択させ、
前記プロセッサに、前記補足バイアス値を加算させる前記命令は、前記プロセッサに、前記選択された値を前記補足バイアス値として加算させる、
C54に記載のコンピュータ可読媒体。
[C57]
前記プロセッサに、スケール変更された係数の前記行列を生成させる前記命令は、前記プロセッサに、入力係数の前記行列の中の各係数を第2の大きさだけ左シフトさせ、
前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記命令は、変換された係数の前記行列の中の各係数が、第3の大きさによって測定される精度の余分なビットの数を含むようにし、そして
前記第1の大きさは、前記第2の大きさと前記第3の大きさとを加えたものに等しい、
C52に記載のコンピュータ可読媒体。
[C58]
前記第2の大きさは、前記変換を適用しながら使用される前記固定小数点数の仮数ビットの数に等しい、C57に記載のコンピュータ可読媒体。
[C59]
前記第2の大きさは、3であり、そして
入力係数の前記行列を仮定すると、前記ピクセル成分値は、電気電子技術者協会(IEEE)1180規格の精度要件を満たす、
C58に記載のコンピュータ可読媒体。
[C60]
前記命令は、さらに、前記プロセッサに、
ピクセル成分値の前記行列の中にピクセル成分値を含むピクセルを構築させ、
前記ピクセルをディスプレイユニット上で表示させる、
C52に記載のコンピュータ可読媒体。
[C61]
前記固定小数点数は、16−ビットの固定小数点数である、C46に記載のコンピュータ可読媒体。

Claims (16)

  1. 逆離散コサイン変換の計算のためにデバイスにより実施される方法であって、
    変換された複数の係数のベクトルを生成するために、複数のソース係数のベクトルに変換を適用する複数の固定小数点数に対する一連のバタフライ構造演算をメディア符号化デバイスで使用することを備え、
    なお、変換された複数の係数の前記ベクトルの中の変換された複数の係数は、無制限の精度を有する理想的な逆離散コサイン変換を使用して複数のソース係数の前記ベクトルを変換することにより生成されることになる複数の値の近似値であ
    なお、前記一連の前記バタフライ構造演算を使用することは、形式、
    u=((x*C)>>k)−((y*-S)>>k’)、
    ν=((x*S)>>k’)−((y*C)>>k)、
    のバタフライ構造演算を実行することを備え、
    なお、uおよびνは、結果として生ずる固定小数点数であり、
    C、S、kおよびk’は、定数の整数であり、
    xおよびyは、固定小数点変数であそして
    C/2 およびS/2 k’ は、無理数定数の有理数近似値である、
    なお、複数のソース係数の前記ベクトルは、8つの係数、x 、x 、x 、x 、x 、x 、x 、およびx 、から構成され、
    変換された複数の係数の前記ベクトルは、8つの係数、z 、z 、z 、z 、z 、z 、z 、およびz 、から構成され、そして
    前記バタフライ構造演算のうちのいずれかを実行することは、
    Figure 0005661836
    である第1のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第2のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第3のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第4のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第5のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第6のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第7のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第8のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第9のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第10のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第11のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第12のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第13のバタフライ構造演算を実行することと、
    を備える、方法。
  2. α、β、γ、δ、ε、およびζは、それぞれ異なる、無理数値
    Figure 0005661836
    の近似値である、請求項に記載の方法。
  3. α=8867/16384、β=21407/16384、γ=5681/4096、δ=565/2048、ε=9633/8192、ζ=12873/16384である、請求項に記載の方法。
  4. 前記一連のバタフライ構造演算を使用することは、前記バタフライ構造演算の中の乗算演算を実行することで得られるであろう複数の値を近似する結果となる変換された複数の係数の前記ベクトルの複数の値を生成する一連のシフト、加算、および減算演算を使用することを備える、請求項に記載の方法。
  5. 逆離散コサイン変換の計算のためのデバイスであって、
    1つ又は複数のプロセッサと、
    前記1つまたは複数のプロセッサによって実行される、変換された複数の係数のベクトルを生成するために、複数のソース係数のベクトルに変換を適用する複数の固定小数点数に対する一連のバタフライ構造演算を使用する逆変換モジュールとを備え、
    なお、変換された複数の係数の前記ベクトルの中の変換された複数の係数は、無制限の精度を有する理想的な逆離散コサイン変換を使用して複数のソース係数の前記ベクトルを変換することにより生成されることになる複数の値の近似値であり、
    前記逆変換モジュールによって実行される前記バタフライ構造演算のうちの前記1つは、形式、
    u=((x*C)>>k)−((y*-S)>>k’)、
    ν=((x*S)>>k’)−((y*C)>>k)、であり、
    なお、uおよびνは、結果として生ずる固定小数点値であり、C、S、kおよびk’は、定数の整数であり、xおよびyは、固定小数点変数であそして
    C/2 およびS/2 k’ は、無理数定数の有理数近似値である、
    なお、複数のソース係数の前記ベクトルは、8つの係数、x 、x 、x 、x 、x 、x 、x 、およびx 、から構成され、
    変換された複数の係数の前記ベクトルは、8つの係数、z 、z 、z 、z 、z 、z 、z 、およびz 、から構成され、そして
    前記逆変換モジュールは、
    Figure 0005661836
    である第1のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第2のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第3のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第4のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第5のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第6のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第7のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第8のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第9のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第10のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第11のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第12のバタフライ構造演算を実行することと、
    Figure 0005661836
    である第13のバタフライ構造演算を実行することと、
    により前記バタフライ構造演算を実行する、デバイス。
  6. α、β、γ、δ、ε、およびζは、それぞれ異なる、無理数値
    Figure 0005661836
    の近似値である、請求項に記載のデバイス。
  7. α=8867/16384、β=21407/16384、γ=5681/4096、δ=565/2048、ε=9633/8192、ζ=12873/16384である、請求項に記載のデバイス。
  8. 前記逆変換モジュールは、前記バタフライ構造演算の中の乗算演算を実行することで得られるであろう複数の値を近似する結果となる変換された複数の係数の前記ベクトルの複数の値を生成する一連のシフト、加算、および減算演算を使用して、前記バタフライ構造演算を実行する、請求項に記載のデバイス。
  9. 逆離散コサイン変換の計算のためのデバイスであって、
    変換された複数の係数のベクトルを計算するために、複数のソース係数のベクトルに変換を適用する複数の固定小数点数に対する一連のバタフライ構造演算を使用するための手段を備え、
    変換された複数の係数の前記ベクトルの中の変換された複数の係数は、無制限の精度を有する理想的な逆離散コサイン変換を使用して複数のソース係数の前記ベクトルを変換することにより生成されることになる複数の値の近似値であり、
    一連のバタフライ構造演算を使用するための前記手段は、バタフライ構造演算を実行するための1組の手段を備え、
    バタフライ構造演算を実行するための前記手段の各々は、形式、
    u=((x*C)>>k)−((y*-S)>>k’)、
    ν=((x*S)>>k’)−((y*C)>>k)、
    のバタフライ構造演算を実行するための手段を備え、
    なお、uおよびνは、結果として生ずる固定小数点値であり、
    C、S、kおよびk’は、定数の整数であり、
    xおよびyは、固定小数点変数であそして
    C/2 およびS/2 k’ は、無理数定数の有理数近似値である、
    なお、複数のソース係数の前記ベクトルは、8つの係数、x 、x 、x 、x 、x 、x 、x 、およびx 、から構成され、
    変換された複数の係数の前記ベクトルは、8つの係数、z 、z 、z 、z 、z 、z 、z 、およびz 、から構成され、そして
    バタフライ構造演算を実行するための前記1組の手段は、
    Figure 0005661836
    である第1のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第2のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第3のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第4のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第5のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第6のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第7のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第8のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第9のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第10のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第11のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第12のバタフライ構造演算を実行するための手段と、
    Figure 0005661836
    である第13のバタフライ構造演算を実行するための手段と、
    を備える、デバイス。
  10. α、β、γ、δ、ε、およびζは、それぞれ異なる、無理数値
    Figure 0005661836
    の近似値である、請求項に記載のデバイス。
  11. α=8867/16384、β=21407/16384、γ=5681/4096、δ=565/2048、ε=9633/8192、ζ=12873/16384である、請求項10に記載のデバイス。
  12. 前記一連のバタフライ構造演算を使用するための前記手段は、前記バタフライ構造演算の中の乗算演算を実行することで得られるであろう複数の値を近似する結果となる変換された係数の前記ベクトルの複数の値を生成する一連のシフト、加算、および減算演算を使用して、前記バタフライ構造演算を実行する、請求項に記載のデバイス。
  13. 逆離散コサイン変換の計算のための複数の命令を備えるコンピュータ可読記憶媒体であって、
    前記複数の命令は、実行されるときに、プログラマブルプロセッサに、
    変換された複数の係数のベクトルを生成するために、複数のソース係数のベクトルに変換を適用する複数の固定小数点数に対する一連のバタフライ構造演算を使用させる、
    なお、変換された複数の係数の前記ベクトルの中の変換された複数の係数は、無制限の精度を有する理想的な逆離散コサイン変換を使用して複数のソース係数の前記ベクトルを変換することにより生成されることになる複数の値の近似値であり、
    なお、前記プロセッサに前記バタフライ構造演算を実行させる前記複数の命令は、前記プロセッサに、形式、
    u=((x*C)>>k)−((y*-S)>>k’)、
    ν=((x*S)>>k’)−((y*C)>>k)、
    のバタフライ構造演算を実行させ、
    uおよびνは、結果として生ずる固定小数点数であり、C、S、kおよびk’は、定数の整数であり、xおよびyは、固定小数点変数であそして
    C/2 およびS/2 k’ は、無理数定数の有理数近似値である、
    複数のソース係数の前記ベクトルは、8つの係数、x 、x 、x 、x 、x 、x 、x 、およびx 、から構成され、
    変換された複数の係数の前記ベクトルは、8つの係数、z 、z 、z 、z 、z 、z 、z 、およびz 、から構成され、
    前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記命令は、前記プログラマブルプロセッサに、
    Figure 0005661836
    である第1のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第2のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第3のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第4のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第5のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第6のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第7のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第8のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第9のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第10のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第11のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第12のバタフライ構造演算を実行させ、
    Figure 0005661836
    である第13のバタフライ構造演算を実行させる、コンピュータ可読記憶媒体。
  14. α、β、γ、δ、ε、およびζは、それぞれ異なる、無理数値
    Figure 0005661836
    の近似値である、請求項13に記載のコンピュータ可読記憶媒体。
  15. α=8867/16384、β=21407/16384、γ=5681/4096、δ=565/2048、ε=9633/8192、ζ=12873/16384である、請求項14に記載のコンピュータ可読記憶媒体。
  16. 前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記複数の命令は、前記プログラマブルプロセッサに、乗算演算を実行することで得られるであろう複数の値を近似する結果となる複数の値を生成する一連のシフト、加算、減算演算を使用して、前記バタフライ構造演算において変換された複数の係数の前記ベクトルの複数の値を乗算させる、請求項13に記載のコンピュータ可読記憶媒体。
JP2013048219A 2006-06-26 2013-03-11 逆離散コサイン変換の計算中の誤差の低減 Expired - Fee Related JP5661836B2 (ja)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
US81669706P 2006-06-26 2006-06-26
US60/816,697 2006-06-26
US84136206P 2006-08-30 2006-08-30
US60/841,362 2006-08-30
US84719406P 2006-09-25 2006-09-25
US60/847,194 2006-09-25
US82966906P 2006-10-16 2006-10-16
US60/829,669 2006-10-16
US86953006P 2006-12-11 2006-12-11
US60/869,530 2006-12-11

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2009518500A Division JP5269782B2 (ja) 2006-06-26 2007-06-26 逆離散コサイン変換の計算中の誤差の低減

Publications (2)

Publication Number Publication Date
JP2013211011A JP2013211011A (ja) 2013-10-10
JP5661836B2 true JP5661836B2 (ja) 2015-01-28

Family

ID=38624012

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2009518495A Expired - Fee Related JP5086343B2 (ja) 2006-06-26 2007-06-25 逆離散コサイン変換計算における誤差低減
JP2009518500A Expired - Fee Related JP5269782B2 (ja) 2006-06-26 2007-06-26 逆離散コサイン変換の計算中の誤差の低減
JP2013048219A Expired - Fee Related JP5661836B2 (ja) 2006-06-26 2013-03-11 逆離散コサイン変換の計算中の誤差の低減

Family Applications Before (2)

Application Number Title Priority Date Filing Date
JP2009518495A Expired - Fee Related JP5086343B2 (ja) 2006-06-26 2007-06-25 逆離散コサイン変換計算における誤差低減
JP2009518500A Expired - Fee Related JP5269782B2 (ja) 2006-06-26 2007-06-26 逆離散コサイン変換の計算中の誤差の低減

Country Status (10)

Country Link
US (2) US8385424B2 (ja)
EP (2) EP2035958A2 (ja)
JP (3) JP5086343B2 (ja)
KR (2) KR101013344B1 (ja)
CN (2) CN102007489B (ja)
BR (1) BRPI0712984A2 (ja)
CA (2) CA2653692C (ja)
IN (1) IN2014MN01239A (ja)
TW (2) TWI382767B (ja)
WO (2) WO2008002881A2 (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8385424B2 (en) * 2006-06-26 2013-02-26 Qualcomm Incorporated Reduction of errors during computation of inverse discrete cosine transform
US8571340B2 (en) * 2006-06-26 2013-10-29 Qualcomm Incorporated Efficient fixed-point approximations of forward and inverse discrete cosine transforms
US8300698B2 (en) * 2006-10-23 2012-10-30 Qualcomm Incorporated Signalling of maximum dynamic range of inverse discrete cosine transform
US8819095B2 (en) * 2007-08-28 2014-08-26 Qualcomm Incorporated Fast computation of products by dyadic fractions with sign-symmetric rounding errors
US8731062B2 (en) * 2008-02-05 2014-05-20 Ntt Docomo, Inc. Noise and/or flicker reduction in video sequences using spatial and temporal processing
US9378751B2 (en) * 2008-06-19 2016-06-28 Broadcom Corporation Method and system for digital gain processing in a hardware audio CODEC for audio transmission
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
NO332205B1 (no) * 2008-12-30 2012-07-30 Cisco Systems Int Sarl Implementering av entropikoding/dekoding av transformasjonskoeffisientdata til videokompressjonssystemer i datamaskininnretninger
US8879632B2 (en) 2010-02-18 2014-11-04 Qualcomm Incorporated Fixed point implementation for geometric motion partitioning
EP2559248A2 (en) * 2010-04-12 2013-02-20 Qualcomm Incorporated Fixed point implementation for geometric motion partitioning
US9185422B2 (en) * 2010-07-15 2015-11-10 Qualcomm Incorporated Variable localized bit-depth increase for fixed-point transforms in video coding
JP5620587B2 (ja) 2010-09-28 2014-11-05 サムスン エレクトロニクスカンパニー リミテッド ビデオ符号化方法及びその装置、並びにビデオ復号化方法及びその装置
US9824066B2 (en) * 2011-01-10 2017-11-21 Qualcomm Incorporated 32-point transform for media data coding
US20120183048A1 (en) * 2011-01-18 2012-07-19 Louis Joseph Kerofsky Video decoder with reduced dynamic range transform with multiple clipping
AU2016219700B2 (en) * 2011-01-18 2018-06-28 Dolby International Ab Video decoder with reduced dynamic range transform with inverse transform shifting memory
US20120183045A1 (en) * 2011-01-18 2012-07-19 Louis Joseph Kerofsky Video decoder with reduced dynamic range transform including clipping
US20120183047A1 (en) * 2011-01-18 2012-07-19 Louis Joseph Kerofsky Video decoder with reduced dynamic range transform with inverse transform clipping
US9807395B2 (en) 2011-01-18 2017-10-31 Dolby International Ab Video decoder with reduced dynamic range transform with inverse transform shifting memory
WO2012115486A2 (ko) * 2011-02-25 2012-08-30 삼성전자 주식회사 영상의 변환 방법 및 장치, 및 영상의 역변환 방법 및 장치
US9326001B2 (en) * 2011-03-22 2016-04-26 International Business Machines Corporation Scalable image distribution in virtualized server environments
MX2014000055A (es) * 2011-06-30 2014-04-30 Samsung Electronics Co Ltd Método de codificación de video con ajuste de profundidad de bits para conversión de punto fijo y aparato para el mismo, y método de decodificación de video y aparato para el mismo.
CN103959780B (zh) * 2011-12-15 2017-10-13 寰发股份有限公司 量化电平截取装置及方法
WO2013086724A1 (en) 2011-12-15 2013-06-20 Mediatek Singapore Pte. Ltd. Method of clippling transformed coefficients before de-quantization
JP6480186B2 (ja) * 2012-01-19 2019-03-06 ヴィド スケール インコーポレイテッド ビデオコーディング量子化およびダイナミックレンジ制御のシステムおよび方法
US9131210B2 (en) 2012-03-16 2015-09-08 Texas Instruments Incorporated Low-complexity two-dimensional (2D) separable transform design with transpose buffer management
WO2013175736A1 (ja) 2012-05-25 2013-11-28 パナソニック株式会社 動画像符号化方法、動画像符号化装置、動画像復号方法、動画像復号装置、および、動画像符号化復号装置
CA2841107C (en) 2012-05-25 2023-12-19 Panasonic Corporation Image encoding and decoding using context adaptive binary arithmetic coding with a bypass mode
CN103650511B (zh) 2012-05-25 2017-12-15 太阳专利托管公司 运动图像解码方法及运动图像解码装置
BR112013032418B1 (pt) 2012-06-04 2023-04-11 Sun Patent Trust Método e aparelho de codificação de imagem em movimento, método e aparelho de decodificação de imagem em movimento, e aparelho de codificação e decodificação de imagem em movimento
KR20130137951A (ko) * 2012-06-08 2013-12-18 한국전자통신연구원 초고해상도 영상 코덱을 위한 역변환 방법
US8806489B2 (en) 2012-07-05 2014-08-12 International Business Machines Corporation Virtual machine image distribution network
US9648332B2 (en) * 2013-10-28 2017-05-09 Qualcomm Incorporated Adaptive inter-color component residual prediction
JP6102707B2 (ja) * 2013-12-05 2017-03-29 Nttエレクトロニクス株式会社 デジタル符号化装置
US9516345B2 (en) * 2014-03-17 2016-12-06 Qualcomm Incorporated Systems and methods for low complexity forward transforms using mesh-based calculations
US9432696B2 (en) 2014-03-17 2016-08-30 Qualcomm Incorporated Systems and methods for low complexity forward transforms using zeroed-out coefficients
US10057587B2 (en) * 2015-01-31 2018-08-21 Qualcomm Incorporated Coding escape pixels for palette mode coding
KR101644039B1 (ko) * 2015-06-11 2016-07-29 에스케이텔레콤 주식회사 고정소수점 연산 방법 및 고정소수점 연산 장치
US20230036509A1 (en) 2019-12-06 2023-02-02 Fraunhofer-Gesellschaft zur Förderung derangewandten Forschung e.V. Matrix Based Intra Prediction with Mode-Global Settings
EP3849089A1 (en) * 2020-01-09 2021-07-14 Microsoft Technology Licensing, LLC Encoding for data recovery in storage systems

Family Cites Families (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3120605A (en) * 1959-09-02 1964-02-04 Technion Res & Dev Foundation General purpose transistorized function generator
US3982112A (en) * 1974-12-23 1976-09-21 General Electric Company Recursive numerical processor
EP0610975B1 (en) * 1989-01-27 1998-09-02 Dolby Laboratories Licensing Corporation Coded signal formatting for encoder and decoder of high-quality audio
US5129015A (en) 1990-04-19 1992-07-07 Ricoh Company Ltd. Apparatus and method for compressing still images without multiplication
DE9016732U1 (de) 1990-12-11 1992-04-09 Robert Bosch Gmbh, 70469 Stuttgart Elektrisches Gerät, insbesondere Schalt- und Steuergerät für Kraftfahrzeuge
US5122875A (en) 1991-02-27 1992-06-16 General Electric Company An HDTV compression system
RU2096955C1 (ru) 1991-03-01 1997-11-27 Е.И.Дюпон Де Немур Энд Компани Вододиспергируемая гранулированная пестицидная композиция, получаемая методом экструзии, и способ ее получения
JPH0530470A (ja) * 1991-07-19 1993-02-05 Sony Corp デイジタルビデオ信号の記録および/または再生方法
US5285402A (en) 1991-11-22 1994-02-08 Intel Corporation Multiplyless discrete cosine transform
US5539836A (en) 1991-12-20 1996-07-23 Alaris Inc. Method and apparatus for the realization of two-dimensional discrete cosine transform for an 8*8 image fragment
TW224553B (en) 1993-03-01 1994-06-01 Sony Co Ltd Method and apparatus for inverse discrete consine transform and coding/decoding of moving picture
EP0648051B1 (en) * 1993-03-31 1999-02-03 Sony Corporation Signal processor
JP2816295B2 (ja) * 1993-05-21 1998-10-27 鐘紡株式会社 離散コサイン変換方法および離散コサイン変換回路
RU2122295C1 (ru) 1994-04-29 1998-11-20 Виктор Павлович Дворкович Способ покадрового сжатия изображений
US6549666B1 (en) 1994-09-21 2003-04-15 Ricoh Company, Ltd Reversible embedded wavelet system implementation
US5701263A (en) 1995-08-28 1997-12-23 Hyundai Electronics America Inverse discrete cosine transform processor for VLSI implementation
US6026183A (en) 1995-10-27 2000-02-15 Texas Instruments Incorporated Content-based video compression
JP3302870B2 (ja) * 1995-12-11 2002-07-15 三菱電機株式会社 センサのバイアス誤差推定装置
US5825927A (en) 1996-01-16 1998-10-20 Hitachi America, Ltd. Methods and apparatus for encoding video data in a manner that is well suited for decoding by regular or downconverting decoders
US5754456A (en) 1996-03-05 1998-05-19 Intel Corporation Computer system performing an inverse cosine transfer function for use with multimedia information
US6020838A (en) 1996-12-23 2000-02-01 National Instruments Corporation System and method for generating a sigma-delta correction circuit using matrix calculation of linearity error correction coefficients
RU2196391C2 (ru) 1997-01-31 2003-01-10 Сименс Акциенгезелльшафт Способ и устройство для кодирования и декодирования изображения в цифровой форме
TW376628B (en) 1997-05-06 1999-12-11 Holtek Semiconductor Inc Method of accelerating JPEG quantization calculation in image compression
US6134270A (en) 1997-06-13 2000-10-17 Sun Microsystems, Inc. Scaled forward and inverse discrete cosine transform and video compression/decompression systems employing the same
JP3524747B2 (ja) 1998-01-30 2004-05-10 三洋電機株式会社 離散コサイン変換回路
US6587590B1 (en) 1998-02-02 2003-07-01 The Trustees Of The University Of Pennsylvania Method and system for computing 8×8 DCT/IDCT and a VLSI implementation
TW395135B (en) 1998-03-03 2000-06-21 Nat Science Council A high throughput and regular architecture of 2-D 8x8 DCT/IDCT using direct form
US6539058B1 (en) * 1998-04-13 2003-03-25 Hitachi America, Ltd. Methods and apparatus for reducing drift due to averaging in reduced resolution video decoders
US6792149B1 (en) 1998-05-07 2004-09-14 Sarnoff Corporation Method and apparatus for resizing an image frame including field-mode encoding
US6310919B1 (en) 1998-05-07 2001-10-30 Sarnoff Corporation Method and apparatus for adaptively scaling motion vector information in an information stream decoder
KR20000013653A (ko) 1998-08-12 2000-03-06 이종하 정/역 최적화 정수형 여현변환장치 및 그 방법
EP0990992A3 (de) 1998-09-28 2002-02-13 Siemens Aktiengesellschaft Diskreter/invers-diskreter Cosinus-Transformationsvorrichtung und Anordnung
GB2347038A (en) 1999-02-18 2000-08-23 Nokia Mobile Phones Ltd A video codec using re-transmission
US6167092A (en) 1999-08-12 2000-12-26 Packetvideo Corporation Method and device for variable complexity decoding of motion-compensated block-based compressed digital video
US6529634B1 (en) 1999-11-08 2003-03-04 Qualcomm, Inc. Contrast sensitive variance based adaptive block size DCT image compression
KR100683380B1 (ko) 2000-02-21 2007-02-15 주식회사 팬택앤큐리텔 영상 압축 부호화를 위한 변환 및 역변환 방법 및 장치
JP2001318910A (ja) 2000-02-29 2001-11-16 Sony Corp 逆離散コサイン変換装置
DE10116204A1 (de) 2000-08-12 2002-02-21 Bosch Gmbh Robert Verfahren zur ganzzahligen Approximation von Transformationskoeffizienten sowie Coder und Decoder
KR100357689B1 (ko) 2000-11-13 2002-10-19 삼성전자 주식회사 일관된 화질을 가지는 실시간 가변 비트율 엠펙 비디오전송 시스템
US6859815B2 (en) 2000-12-19 2005-02-22 Koninklijke Philips Electronics N.V. Approximate inverse discrete cosine transform for scalable computation complexity video and still image decoding
US6799192B1 (en) 2001-01-09 2004-09-28 Apple Computer, Inc. Method and apparatus for inverse discrete cosine transform
US6873655B2 (en) 2001-01-09 2005-03-29 Thomson Licensing A.A. Codec system and method for spatially scalable video data
US8374237B2 (en) 2001-03-02 2013-02-12 Dolby Laboratories Licensing Corporation High precision encoding and decoding of video images
JP2002374531A (ja) 2001-06-15 2002-12-26 Victor Co Of Japan Ltd 復号装置
US7082450B2 (en) * 2001-08-30 2006-07-25 Nokia Corporation Implementation of a transform and of a subsequent quantization
US6909753B2 (en) 2001-12-05 2005-06-21 Koninklijke Philips Electronics, N.V. Combined MPEG-4 FGS and modulation algorithm for wireless video transmission
US7007055B2 (en) 2002-03-12 2006-02-28 Intel Corporation Method of performing NxM Discrete Cosine Transform
US20030215011A1 (en) 2002-05-17 2003-11-20 General Instrument Corporation Method and apparatus for transcoding compressed video bitstreams
US7379956B2 (en) 2002-07-14 2008-05-27 Apple Inc. Encoding and decoding data arrays
KR100376060B1 (en) 2002-10-25 2003-03-17 Humax Co Ltd Method and system for re-setting image size using inverse discrete cosine transform
US7792891B2 (en) 2002-12-11 2010-09-07 Nvidia Corporation Forward discrete cosine transform engine
CN1326397C (zh) * 2003-06-02 2007-07-11 杭州高特信息技术有限公司 一种dct快速变换结构
TWI224931B (en) 2003-07-04 2004-12-01 Mediatek Inc Scalable system for inverse discrete cosine transform and method thereof
TWI257054B (en) 2003-09-03 2006-06-21 Mediatek Inc Rapid and low cost of inverse discrete cosine transform system and method thereof
WO2005032117A2 (en) 2003-09-24 2005-04-07 Texas Instruments Incorporated 8x8 transform and quantization
GB0323038D0 (en) 2003-10-02 2003-11-05 Koninkl Philips Electronics Nv Method and apparatus for improved inverse transform calculation
JP3951036B2 (ja) 2003-11-27 2007-08-01 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的小数点方式、動的小数点演算方法、並びに2次元逆離散コサイン変換方法及びその装置
US20050196055A1 (en) 2004-03-04 2005-09-08 Sheng Zhong Method and system for codifying signals that ensure high fidelity reconstruction
US7730116B2 (en) 2004-12-14 2010-06-01 Stmicroelectronics, Inc. Method and system for fast implementation of an approximation of a discrete cosine transform
US8571340B2 (en) 2006-06-26 2013-10-29 Qualcomm Incorporated Efficient fixed-point approximations of forward and inverse discrete cosine transforms
US8385424B2 (en) 2006-06-26 2013-02-26 Qualcomm Incorporated Reduction of errors during computation of inverse discrete cosine transform
US8300698B2 (en) 2006-10-23 2012-10-30 Qualcomm Incorporated Signalling of maximum dynamic range of inverse discrete cosine transform

Also Published As

Publication number Publication date
BRPI0712984A2 (pt) 2012-04-03
KR20090027670A (ko) 2009-03-17
CA2653693A1 (en) 2008-01-03
JP2010505154A (ja) 2010-02-18
WO2008002881A2 (en) 2008-01-03
EP2035958A2 (en) 2009-03-18
TWI373255B (en) 2012-09-21
KR20090016732A (ko) 2009-02-17
CA2653693C (en) 2013-07-23
CA2653692C (en) 2013-07-30
US8606023B2 (en) 2013-12-10
CN102016829B (zh) 2015-10-14
WO2008002897A2 (en) 2008-01-03
KR101013344B1 (ko) 2011-02-14
JP2010501911A (ja) 2010-01-21
WO2008002897A3 (en) 2011-01-06
CN102007489B (zh) 2014-04-23
IN2014MN01239A (ja) 2015-07-03
TWI382767B (zh) 2013-01-11
EP2035959A2 (en) 2009-03-18
US20070299897A1 (en) 2007-12-27
US20070297504A1 (en) 2007-12-27
CN102016829A (zh) 2011-04-13
JP5086343B2 (ja) 2012-11-28
US8385424B2 (en) 2013-02-26
CN102007489A (zh) 2011-04-06
TW200814792A (en) 2008-03-16
JP5269782B2 (ja) 2013-08-21
KR100982156B1 (ko) 2010-09-14
WO2008002881A3 (en) 2011-01-06
JP2013211011A (ja) 2013-10-10
CA2653692A1 (en) 2008-01-03
EP2035959B1 (en) 2020-06-17
TW200814738A (en) 2008-03-16

Similar Documents

Publication Publication Date Title
JP5661836B2 (ja) 逆離散コサイン変換の計算中の誤差の低減
KR100963458B1 (ko) 순이산 및 역이산 코사인 변환의 효율적인 고정 소수점 근사
JP2003333598A (ja) イメージおよびビデオ符号化のための2−d変換
RU2439682C2 (ru) Уменьшение ошибок во время вычисления обратного дискретного косинусного преобразования
JP5129248B2 (ja) 順方向および逆離散コサイン変換の効率的な固定小数点近似
RU2496139C2 (ru) Эффективные аппроксимации с фиксированной запятой прямого и обратного дискретных косинусных преобразований
JP2005354307A (ja) 逆量子化器及びこれを用いた画像復号化装置
Zuair Computational analysis of real-time MPEG-2 video compression and its hardware implementation

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140528

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140610

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140903

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20141104

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141203

R150 Certificate of patent or registration of utility model

Ref document number: 5661836

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees