(57)【特許請求の範囲】
【請求項１】
タイプＩＩの離散コサイン変換（ＤＣＴ−ＩＩ）を実行する方法であって、前記方法が、
装置を用いて、実行すべき前記ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記装置を用いて、前記ＤＣＴ−ＩＩを実行することと
を備え、
前記ＤＣＴ−ＩＩを実行することが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算することと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生することと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生することと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を含む、方法。
【請求項２】
前記バタフライを計算することと、前記順序を逆転させることと、前記一連の再帰的減算を計算することと、前記サブＤＣＴ−ＩＩを計算することと、前記完全サブＤＣＴ−ＩＩＩを計算することとは、前記一連の再帰的減算を計算することによって生成された追加のサブＤＣＴ−ＩＩのサイズが２の倍数でなくなるまで前記サブＤＣＴ−ＩＩに関して再帰的に行われる、請求項１に記載の方法。
【請求項３】
前記サブＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
前記サブＤＣＴ−ＩＩのサイズが２の倍数であるという前記判断に応答して、前記サブＤＣＴ−ＩＩを実行することと
をさらに備え、
前記サブＤＣＴ−ＩＩを実行することが、
前記サブＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含む別のバタフライを計算することであって、前記別のバタフライが、前記サブＤＣＴ−ＩＩへの前記入力の第１のサブセットを相互加算する第１の部分と、前記サブＤＣＴ−ＩＩへの前記入力の第２のサブセットを相互減算する第２の部分とを含む、別のバタフライを計算することと、
前記サブＤＣＴ−ＩＩへの相互減算された入力の前記第２のサブセットの順序を逆転させ、前記サブＤＣＴ−ＩＩへの前記入力の逆順の第２のサブセットを発生することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記サブＤＣＴ−ＩＩへの前記入力の再帰的に減算された第２のサブセットを発生することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記バタフライ演算された第１のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、追加のサブＤＣＴ−ＩＩを計算することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、追加の完全サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれの追加のサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を含む、請求項１に記載の方法。
【請求項４】
量子化行列の実装複雑さを増加させることなしに前記ＤＣＴ−ＩＩを計算するときに除去されるファクタを適用する、前記量子化行列の量子化係数を構成することをさらに備える、請求項１に記載の方法。
【請求項５】
前記サブＤＣＴ−ＩＩを計算することが、ＤＣＴ−ＩＩユニットの実装複雑さを低減するようにファクタを除去するように、前記サブＤＣＴ−ＩＩを計算することを備える、請求項１に記載の方法。
【請求項６】
前記装置がビデオコーダを備え、
実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断することが、
残差ビデオデータのブロックを受信することと、
残差ビデオデータの前記ブロックの前記サイズが２の倍数であるかどうかを判断することと、
残差ビデオデータの前記ブロックの前記サイズに基づいて、実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断することと
を備え、
前記出力値がＤＣＴ係数を備え、
前記方法が、前記ビデオコーダの実装複雑さを増加させることなしに実行すべき前記ＤＣＴ−ＩＩを計算するときに除去されるファクタを適用する量子化係数に従って前記ＤＣＴ係数を量子化するために、前記ビデオコーダの量子化ユニットを用いて量子化を実行することをさらに備える、請求項１に記載の方法。
【請求項７】
前記装置が、ビデオエンコーダ、ビデオデコーダ、オーディオエンコーダ、オーディオデコーダ、画像エンコーダおよび画像デコーダのうちの１つまたは複数を備える、請求項１に記載の方法。
【請求項８】
実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数でないと判断したことに応答して、バタフライを計算することなしに追加のサブＤＣＴ−ＩＩを発生するために前記ＤＣＴ−ＩＩを直接計算することと、相互減算された入力の前記第２のサブセットの前記順序を逆転させることと、前記一連の再帰的減算を計算することと、前記サブＤＣＴ−ＩＩを計算することと、前記完全サブＤＣＴ−ＩＩＩを計算することと、出力の前記第１および第２のセットを並べ替えることとをさらに備える、請求項１に記載の方法。
【請求項９】
実行すべきＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断し、実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩを実行する、ＤＣＴ−ＩＩユニット
を備え、
前記ＤＣＴ−ＩＩユニットが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、前記バタフライユニットが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライユニットと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生する順序逆転ユニットと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生する再帰的減算ユニットと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算する、サブＤＣＴ−ＩＩユニットと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算する、完全サブＤＣＴ−ＩＩＩユニットと
を含み、
前記ＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替える、メディアコーディングデバイス。
【請求項１０】
前記ＤＣＴ−ＩＩユニットは、前記一連の再帰的減算の計算によって生成された追加のサブＤＣＴ−ＩＩのサイズが２の倍数でなくなるまで、前記サブＤＣＴ−ＩＩに関して、前記バタフライを計算し、前記順序を逆転させ、前記一連の再帰的減算を計算し、前記サブＤＣＴ−ＩＩを計算し、前記完全サブＤＣＴ−ＩＩＩを再帰的に計算する、請求項９に記載のメディアコーディングデバイス。
【請求項１１】
前記サブＤＣＴ−ＩＩユニットが、前記サブＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断し、前記サブＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、前記サブＤＣＴ−ＩＩを実行し、
前記サブＤＣＴ−ＩＩユニットが、
前記サブＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含む別のバタフライを計算する追加のバタフライユニットであって、前記別のバタフライが、前記サブＤＣＴ−ＩＩへの前記入力の第１のサブセットを相互加算する第１の部分と、前記サブＤＣＴ−ＩＩへの前記入力の第２のサブセットを相互減算する第２の部分とを含む、追加のバタフライユニットと、
前記サブＤＣＴ−ＩＩへの相互減算された入力の前記第２のサブセットの順序を逆転させ、前記サブＤＣＴ−ＩＩへの前記入力の逆順の第２のサブセットを発生する、追加の順序逆転ユニットと、
前記サブＤＣＴ−ＩＩへの前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記サブＤＣＴ−ＩＩへの前記入力の再帰的に減算された第２のサブセットを発生する、追加の再帰的減算ユニットと、
前記サブＤＣＴ−ＩＩへの前記入力の前記バタフライ演算された第１のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、追加のサブＤＣＴ−ＩＩを計算する、追加のサブＤＣＴ−ＩＩユニットと、
前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、追加の完全サブＤＣＴ−ＩＩＩを計算する、追加の完全サブＤＣＴ−ＩＩユニットと
を含み、
前記サブＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれの追加のサブＤＣＴ−ＩＩユニットと完全サブＤＣＴ−ＩＩＩユニットとによって生成された出力の第１および第２のセットを並べ替える、請求項９に記載のメディアコーディングデバイス。
【請求項１２】
量子化行列の実装複雑さを増加させることなしに前記ＤＣＴ−ＩＩを計算するときに除去されるファクタを適用する、前記量子化行列を含む量子化ユニットをさらに備える、請求項９に記載のメディアコーディングデバイス。
【請求項１３】
前記サブＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩユニットの実装複雑さを低減するようにファクタを除去するように、前記サブＤＣＴ−ＩＩを計算する、請求項９に記載のメディアコーディングデバイス。
【請求項１４】
前記メディアコーディングデバイスがビデオコーダを備え、
前記ＤＣＴ−ＩＩユニットが、残差ビデオデータのブロックを受信し、残差ビデオデータの前記ブロックのサイズが２の倍数であるかどうかを判断し、残差ビデオデータの前記ブロックの前記サイズに基づいて、実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断し、
前記出力値がＤＣＴ係数を備え、
前記メディアコーディングデバイスが、前記ビデオコーダの実装複雑さを増加させることなしに実行すべき前記ＤＣＴ−ＩＩを計算するときに除去されるファクタを適用する量子化係数に従って前記ＤＣＴ係数を量子化する量子化ユニットをさらに備える、請求項９に記載のメディアコーディングデバイス。
【請求項１５】
前記メディアコーディングデバイスが、ビデオエンコーダ、ビデオデコーダ、オーディオエンコーダ、オーディオデコーダ、画像エンコーダおよび画像デコーダのうちの１つまたは複数を備える、請求項９に記載のメディアコーディングデバイス。
【請求項１６】
前記ＤＣＴ−ＩＩユニットが、実行すべき前記ＤＣＴ−ＩＩのサイズが２の倍数でないと判断したことに応答して、バタフライを計算することなしに追加のサブＤＣＴ−ＩＩを発生するために前記ＤＣＴ−ＩＩを直接計算し、相互減算された入力の前記第２のサブセットの順序を逆転させ、前記一連の再帰的減算を計算し、前記サブＤＣＴ−ＩＩを計算し、前記完全サブＤＣＴ−ＩＩＩを計算し、出力の前記第１および第２のセットを並べ替える、請求項９に記載のメディアコーディングデバイス。
【請求項１７】
プロセッサに、
実行すべきＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩを実行することと
を行わせるための命令を備える非一時的コンピュータ可読媒体であって、
前記プロセッサに前記ＤＣＴ−ＩＩを実行させる前記命令が、前記プロセッサに、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算することと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生することと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生することと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力のバタフライ演算された第１のサブセットを受信し、前記入力のバタフライ演算された前記第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を行わせる命令を含む、非一時的コンピュータ可読媒体。
【請求項１８】
前記命令が、前記プロセッサに、前記一連の再帰的減算を計算することによって生成された追加のサブＤＣＴ−ＩＩのサイズが２の倍数でなくなるまで、前記サブＤＣＴ−ＩＩに関して、前記バタフライを計算することと、前記順序を逆転させることと、前記一連の再帰的減算を計算することと、前記サブＤＣＴ−ＩＩを計算することと、前記完全サブＤＣＴ−ＩＩＩを前記再帰的な方式で計算することとを行わせる、請求項１７に記載の非一時的コンピュータ可読媒体。
【請求項１９】
前記命令が、前記プロセッサに、
前記サブＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
前記サブＤＣＴ−ＩＩのサイズが２の倍数であるという前記判断に応答して、前記サブＤＣＴ−ＩＩを実行することと
を行わせ、
前記プロセッサに前記サブＤＣＴ−ＩＩを実行させる前記命令が、前記プロセッサに、
前記サブＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含む別のバタフライを計算することであって、前記別のバタフライが、前記サブＤＣＴ−ＩＩへの前記入力の第１のサブセットを相互加算する第１の部分と、前記サブＤＣＴ−ＩＩへの前記入力の第２のサブセットを相互減算する第２の部分とを含む、別のバタフライを計算することと、
前記サブＤＣＴ−ＩＩへの相互減算された入力の前記第２のサブセットの順序を逆転させ、前記サブＤＣＴ−ＩＩへの前記入力の逆順の第２のサブセットを発生することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記サブＤＣＴ−ＩＩへの前記入力の再帰的に減算された第２のサブセットを発生することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記バタフライ演算された第１のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、追加のサブＤＣＴ−ＩＩを計算することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、追加の完全サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれの追加のサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を行わせる命令を含む、請求項１７に記載の非一時的コンピュータ可読媒体。
【請求項２０】
前記命令がさらに、前記プロセッサに、ＤＣＴ−ＩＩユニットの実装複雑さを低減するようにファクタを除去するように、前記サブＤＣＴ−ＩＩを計算させる、請求項１７に記載の非一時的コンピュータ可読媒体。
【請求項２１】
前記命令がさらに、前記プロセッサに、
残差ビデオデータのブロックを受信することと、
残差ビデオデータの前記ブロックの前記サイズが２の倍数であるかどうかを判断することと、
残差ビデオデータの前記ブロックの前記サイズに基づいて、実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断することと
を行わせ、
前記出力値がＤＣＴ係数を備え、
前記命令がさらに、前記プロセッサに、ビデオコーダの実装複雑さを増加させることなしに実行すべき前記ＤＣＴ−ＩＩを計算するときに除去されるファクタを適用する量子化係数に従って前記ＤＣＴ係数を量子化させる、請求項１７に記載の非一時的コンピュータ可読媒体。
【請求項２２】
前記命令がさらに、前記プロセッサに、実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数でないと判断したことに応答して、バタフライを計算することなしに追加のサブＤＣＴ−ＩＩを発生するために前記ＤＣＴ−ＩＩを直接計算することと、相互減算された入力の前記第２のサブセットの前記順序を逆転させることと、前記一連の再帰的減算を計算することと、前記サブＤＣＴ−ＩＩを計算することと、前記完全サブＤＣＴ−ＩＩＩを計算することと、出力の前記第１および第２のセットを並べ替えることとを行わせる、請求項１７に記載の非一時的コンピュータ可読媒体。
【請求項２３】
実行すべきＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断するための手段と、
実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩを実行するための手段と
を備える装置であって、
前記ＤＣＴ−ＩＩを実行するための前記手段が、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するための手段であって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算するための手段と、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生するための手段と、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生するための手段と、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算するための手段と、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算するための手段と、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えるための手段と
を含む、装置。
【請求項２４】
前記ＤＣＴ−ＩＩを実行するための前記手段が、前記再帰によって生成された追加のサブＤＣＴ−ＩＩのサイズが２の倍数でなくなるまで前記サブＤＣＴ−ＩＩに関してＤＣＴ−ＩＩを再帰的に実行する、請求項２３に記載の装置。
【請求項２５】
前記サブＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断するための手段と、
前記サブＤＣＴ−ＩＩのサイズが２の倍数であるという前記判断に応答して、前記サブＤＣＴ−ＩＩを実行するための手段と
をさらに備え、
前記サブＤＣＴ−ＩＩを実行するための前記手段が、
前記サブＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含む別のバタフライを計算するための手段であって、前記別のバタフライが、前記サブＤＣＴ−ＩＩへの前記入力の第１のサブセットを発生する第１の部分と、前記サブＤＣＴ−ＩＩへの前記入力の第２のサブセットを発生する第２の部分とを含む、別のバタフライを計算するための手段と、
前記サブＤＣＴ−ＩＩへの相互減算された入力の前記第２のサブセットの順序を逆転させ、前記サブＤＣＴ−ＩＩへの前記入力の逆順の第２のサブセットを発生するための手段と、
前記サブＤＣＴ−ＩＩへの前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記サブＤＣＴ−ＩＩへの前記入力の再帰的に減算された第２のサブセットを発生するための手段と、
前記サブＤＣＴ−ＩＩへの前記入力の前記バタフライ演算された第１のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、追加のサブＤＣＴ−ＩＩを計算するための手段と、
前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、追加の完全サブＤＣＴ−ＩＩＩを計算するための手段と、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれの追加のサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えるための手段と
を含む、請求項２３に記載の装置。
【請求項２６】
量子化行列の実装複雑さを増加させることなしに前記ＤＣＴ−ＩＩを計算するときに除去されるファクタを適用する、前記量子化行列の量子化係数を構成するための手段をさらに備える、請求項２３に記載の装置。
【請求項２７】
前記サブＤＣＴ−ＩＩを計算するための前記手段が、ＤＣＴ−ＩＩユニットの実装複雑さを低減するようにファクタを除去するように、前記サブＤＣＴ−ＩＩを計算するための手段を備える、請求項２３に記載の装置。
【請求項２８】
前記装置がビデオコーダを備え、
実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断するための前記手段が、
残差ビデオデータのブロックを受信するための手段と、
残差ビデオデータの前記ブロックの前記サイズが２の倍数であるかどうかを判断するための手段と、
残差ビデオデータの前記ブロックの前記サイズに基づいて、実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断するための手段と
を備え、
前記出力値がＤＣＴ係数を備え、
前記装置が、前記ビデオコーダの実装複雑さを増加させることなしに実行すべき前記ＤＣＴ−ＩＩを計算するときに除去されるファクタを適用する量子化係数に従って前記ＤＣＴ係数を量子化するための手段を備える、請求項２３に記載の装置。
【請求項２９】
前記装置が、ビデオエンコーダ、ビデオデコーダ、オーディオエンコーダ、オーディオデコーダ、画像エンコーダおよび画像デコーダのうちの１つまたは複数を備える、請求項２３に記載の装置。
【請求項３０】
実行すべき前記ＤＣＴ−ＩＩの前記サイズが２の倍数でないと判断したことに応答して、バタフライを計算することなしに追加のサブＤＣＴ−ＩＩを発生するために前記ＤＣＴ−ＩＩを直接計算し、相互減算された入力の前記第２のサブセットの前記順序を逆転させ、前記一連の再帰的減算を計算し、前記サブＤＣＴ−ＩＩを計算し、前記完全サブＤＣＴ−ＩＩＩを計算し、出力の前記第１および第２のセットを並べ替えるための手段をさらに備える、請求項２３に記載の装置。
【請求項３１】
タイプＩＩの完全離散コサイン変換（ＤＣＴ−ＩＩ）を実行する方法であって、前記方法が、
装置を用いて、実行すべき前記完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記完全ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記装置を用いて、前記完全ＤＣＴ−ＩＩを実行することと
を備え、
前記完全ＤＣＴ−ＩＩを実行することが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算することと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生することと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生することと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、
出力の第１の完全セットを発生するために、出力の前記第１のセットに１つまたは複数のスケールファクタを乗算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、出力の前記第１の完全セットと出力の前記第２のセットとを並べ替えることと
を含む、方法。
【請求項３２】
実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断し、実行すべき前記完全ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記完全ＤＣＴ−ＩＩを実行する、完全ＤＣＴ−ＩＩユニット
を備え、
前記完全ＤＣＴ−ＩＩが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、前記バタフライユニットが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライユニットと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生する順序逆転ユニットと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生する再帰的減算ユニットと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算する、完全サブＤＣＴ−ＩＩユニットと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算する完全サブＤＣＴ−ＩＩＩユニットと、
出力の第１の完全セットを発生するために、サブＤＣＴ−ＩＩＩの出力に１つまたは複数のスケールファクタを乗算するスケーリングユニットと
を含み、
前記完全ＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩの出力値を発生するために、出力の前記第１の完全セットと出力の前記第２のセットとを並べ替える、メディアコーディングデバイス。
【請求項３３】
プロセッサに、
実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記完全ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記完全ＤＣＴ−ＩＩを実行することと
行わせるための命令を備える非一時的コンピュータ可読媒体であって、
前記プロセッサに前記完全ＤＣＴ−ＩＩを実行させる前記命令が、前記プロセッサに、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算することと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生することと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生することと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、
出力の第１の完全セットを発生するために、出力の前記第１のセットに１つまたは複数のスケールファクタを乗算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、出力の前記第１の完全セットおよび出力の前記第２のセットを並べ替えることと
を行わせる命令を含む、非一時的コンピュータ可読媒体。
【請求項３４】
実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断するための手段と、
実行すべき前記完全ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記完全ＤＣＴ−ＩＩを実行するための手段と
を備える装置であって、
前記完全ＤＣＴ−ＩＩを実行するための前記手段が、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するための手段であって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算するための手段と、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生するための手段と、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生するための手段と、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算するための手段と、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算するための手段と、
出力の第１の完全セットを発生するために、出力の前記第１のセットに１つまたは複数のスケールファクタを乗算するための手段と、
前記ＤＣＴ−ＩＩの出力値を発生するために、出力の前記第１の完全セットおよび出力の前記第２のセットを並べ替えるための手段と
を含む、装置。
【請求項３５】
タイプＩＩＩの離散コサイン変換（ＤＣＴ−ＩＩＩ）を実行する方法であって、前記方法が、
装置を用いて、実行すべき前記ＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記ＤＣＴ−ＩＩＩの前記サイズが２の倍数であると判断したことに応答して、前記装置を用いて、前記ＤＣＴ−ＩＩＩを実行することと
を備え、
前記ＤＣＴ−ＩＩＩを実行することが、タイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行することを含み、
前記ＤＣＴ−ＩＩを実行することが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算することと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生することと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生することと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を含む、方法。
【請求項３６】
実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断し、実行すべき前記ＤＣＴ−ＩＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩＩを実行する、ＤＣＴ−ＩＩＩユニット
を備え、
前記ＤＣＴ−ＩＩＩユニットが、ＤＣＴ−ＩＩユニットによって実行されるタイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行し、
前記ＤＣＴ−ＩＩを実行するために、前記ＤＣＴ−ＩＩユニットが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、前記バタフライユニットが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライユニットと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生する順序逆転ユニットと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生する再帰的減算ユニットと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算する、サブＤＣＴ−ＩＩユニットと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算するサブＤＣＴ−ＩＩＩユニットと
を含み、
前記ＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替える、メディアコーディングデバイス。
【請求項３７】
プロセッサに、
実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記ＤＣＴ−ＩＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩＩを実行することと
を行わせるための命令を備える非一時的コンピュータ可読媒体であって、
前記命令が、前記プロセッサに、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算することと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生することと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生することと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
によって実行されたタイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行することによって、前記ＤＣＴ−ＩＩＩを実行させる、非一時的コンピュータ可読媒体。
【請求項３８】
実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断するための手段と、
実行すべき前記ＤＣＴ−ＩＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩＩを実行するための手段と
を備える装置であって、
前記ＤＣＴ−ＩＩＩを実行するための前記手段が、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセット同士を相互加算する第１の部分と、前記入力の第２のサブセット同士を相互減算する第２の部分とを含む、バタフライを計算することと、
相互減算された入力の前記第２のサブセットの順序を逆転させ、前記入力の逆順の第２のサブセットを発生することと、
前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算し、前記入力の再帰的に減算された第２のサブセットを発生することと、ここにおいて、前記再帰的に減算することは、ある時点においてより小さいサイズの前記ＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために前記逆順の第２のサブセットをそれぞれ減算することを含む、
前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
によって実行されたＤＣＴ−ＩＩの逆元を実行するための手段を含む、装置。
【請求項３９】
前記実行すべきＤＣＴ−ＩＩは、実行すべきスケーリングされたＤＣＴ−ＩＩを具備し、
前記サブＤＣＴ−ＩＩを計算することは前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて前記出力の第１のセットを生成するスケーリングされたサブＤＣＴ−ＩＩを計算することを具備し、
前記出力の第１のセットは、出力の第１のスケーリングされたセットを具備する、請求項１の方法。
【請求項４０】
前記実行すべきＤＣＴ−ＩＩは、実行すべき完全ＤＣＴ−ＩＩを具備し、
前記サブＤＣＴ−ＩＩを計算することは、前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて前記出力の第１のセットを生成する完全サブＤＣＴ−ＩＩを計算することを具備し、
前記ＤＣＴ−ＩＩを実行することは、前記出力の第１のセットを生成するために、前記出力の第１のセットに１つまたは複数のスケールファクタを除算することをさらに具備し、
前記出力の第１のセットは、出力の第１の完全セットを具備する、請求項１の方法。
【請求項４１】
前記ＤＣＴ−ＩＩユニットは、スケーリングされたＤＣＴ−ＩＩを実行するためのスケーリングされたＤＣＴ−ＩＩユニットを具備し、
前記サブＤＣＴ−ＩＩユニットは、前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて前記出力の第１のセットを生成するスケーリングされたサブＤＣＴ−ＩＩを計算するスケーリングされたサブＤＣＴ−ＩＩユニットを具備し、
前記出力の第１のセットは、出力の第１のスケーリングされたセットを具備する、請求項９のメディアコーディングデバイス。
【請求項４２】
前記ＤＣＴ−ＩＩユニットは、完全ＤＣＴ−ＩＩを実行するための完全ＤＣＴ−ＩＩユニットを具備し、
前記サブＤＣＴ−ＩＩユニットは、前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて前記出力の第１のセットを生成する完全サブＤＣＴ−ＩＩを計算する完全サブＤＣＴ−ＩＩユニットを具備し、
前記ＤＣＴ−ＩＩユニットはさらに前記出力の第１のセットを１つまたは複数のスケールファクタと乗算して前記出力の第１のセットを生成し、
前記出力の第１のセットは出力の第１の完全セットを具備する、請求項９のメディアコーディングデバイス。
【請求項４３】
前記実行すべきＤＣＴ−ＩＩは、実行すべきスケーリングされたＤＣＴ−ＩＩを具備し、
前記命令は、さらに前記１つまたは複数のプロセッサに、前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて前記出力の第１のセットを生成するスケーリングされたサブＤＣＴ−ＩＩを計算させる命令を具備し、
前記出力の第１のセットは出力の第１のスケーリングされたセットを具備する、請求項１７の非一時的コンピュータ可読媒体。
【請求項４４】
前記実行すべきＤＣＴ−ＩＩは、実行すべき完全ＤＣＴ−ＩＩを具備し、
前記命令はさらに、前記プロセッサに、
前記入力の前記バタフライ演算された第１のサブセットを受信させ、前記入力の前記バタフライ演算された第１のサブセットに基づいて前記出力の第１のセットを生成させ、
前記出力の第１のセットを１つまたは複数のスケールファクタと乗算させて前記出力の第１のセットを生成させ、
前記出力の第１のセットは出力の第１の完全セットを具備する、
請求項１７の非一時的コンピュータ可読媒体。
【請求項４５】
前記ＤＣＴ−ＩＩを実行する手段は、スケーリングされたＤＣＴ−ＩＩを実行する手段を具備し、
前記サブＤＣＴ−ＩＩを計算する手段は、前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて前記出力の第１のセットを生成するスケーリングされたサブＤＣＴ−ＩＩを計算する手段を具備し、
前記出力の第１のセットは、出力の第１のスケーリングされたセットを具備する、請求項２３の装置。
【請求項４６】
前記ＤＣＴ−ＩＩを実行する手段は、完全ＤＣＴ−ＩＩを実行する手段を具備し、
前記サブＤＣＴ−ＩＩを計算することは、前記入力の前記バタフライ演算された第１のサブセットを受信し、前記入力の前記バタフライ演算された第１のサブセットに基づいて前記出力の第１のセットを生成する完全サブＤＣＴ−ＩＩを計算することを具備し、
前記完全ＤＣＴ−ＩＩを実行する手段は、前記出力の第１のセットを１つまたは複数のスケールファクタと乗算し、前記出力の第１のセットを生成する手段をさらに具備し、
前記出力の第１のセットは出力の第１の完全セットを具備する、請求項２３の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、その内容全体が参照により本明細書に組み込まれる、２００９年４月１５日に出願された米国仮出願第６１／１６９，４１８号の利益を主張する。
【０００２】
本開示は、データ圧縮に関し、より詳細には、変換を含むデータ圧縮に関する。
【背景技術】
【０００３】
データ圧縮は、データ記憶空間、伝送帯域幅、またはその両方の消費を低減するために、様々な適用例において広く使用されている。データ圧縮の例示的な適用例には、デジタルビデオ、画像、音声、およびオーディオコーディングなど、可視または可聴メディアデータコーディングがある。たとえば、デジタルビデオコーディングは、デジタルテレビジョン、デジタルダイレクトブロードキャストシステム、ワイヤレス通信デバイス、携帯情報端末（ＰＤＡ）、ラップトップまたはデスクトップコンピュータ、デジタルカメラ、デジタル記録デバイス、ビデオゲームデバイス、セルラー電話または衛星無線電話などを含む、広範囲にわたるデバイスで使用されている。デジタルビデオデバイスは、デジタルビデオをより効率的に送信および受信するために、ＭＰＥＧ−２、ＭＰＥＧ−４、またはＨ．２６４／ＭＰＥＧ−４  Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ（ＡＶＣ）など、ビデオ圧縮技法を実装する。
【０００４】
一般に、ビデオ圧縮技法では、ビデオデータに固有の冗長性を低減または除去するために空間的予測、動き推定および動き補償を実行する。特に、イントラコーディングは、所与のビデオフレーム内のビデオの空間的冗長性を低減または除去するために空間的予測に依拠する。インターコーディングは、隣接フレーム内のビデオの時間的冗長性を低減または除去するために時間的予測に依拠する。インターコーディングの場合、ビデオエンコーダは、２つ以上の隣接フレーム間でビデオブロックを一致させる動作を追跡するために動き推定を実行する。動き推定は、１つまたは複数の参照フレーム中の対応するビデオブロックに対するビデオブロックの変位を示す動きベクトルを発生する。動き補償は、その動きベクトルを使用して、参照フレームから予測ビデオブロックを発生する。動き補償の後、元のビデオブロックから予測ビデオブロックを減算することによって残差ビデオブロックが形成される。
【０００５】
ビデオエンコーダは、ビデオコーディングプロセスによって生成された残差ブロックのビットレートをさらに低減するために、変換を適用し、その後、量子化およびロスレス統計的コーディングプロセスを適用する。場合によっては、適用された変換は離散コサイン変換（ＤＣＴ）を備える。一般に、ＤＣＴは、ブロックのサイズが２のべき乗であるダイアディックサイズのビデオブロックに適用される。したがって、ＤＣＴ係数のダイアディックサイズの行列を生成するために、これらのＤＣＴがダイアディックサイズのビデオブロックに適用されるという点で、これらのＤＣＴはダイアディックサイズＤＣＴと呼ばれることがある。ダイアディックサイズＤＣＴの例には、４×４、８×８および１６×１６ＤＣＴがある。ダイアディックサイズＤＣＴを残差ブロックに適用することから生成されたＤＣＴ係数のダイアディックサイズの行列は、次いで、量子化および（一般に「エントロピーコーディング」プロセスとして知られる）ロスレス統計的コーディングプロセスを受けて、ビットストリームを発生する。統計的コーディングプロセスの例には、コンテキスト適応型可変長コーディング（ＣＡＶＬＣ）またはコンテキスト適応型２値算術コーディング（ＣＡＢＡＣ）がある。ビデオデコーダは、符号化されたビットストリームを受信し、ブロックの各々について残差情報を復元するためにロスレス復号を実行する。残差情報と動き情報とを使用して、ビデオデコーダは、符号化されたビデオを再構成する。
【発明の概要】
【０００６】
概して、本開示は、１つまたは複数の非ダイアディック偶数サイズ離散コサイン変換（ＤＣＴ）を使用して、メディアデータなどのデータをコーディングするための技法を対象とする。非ダイアディック偶数サイズＤＣＴは、２の倍数であるが２のべき乗ではないサイズを有するビデオブロックなどのメディアデータをコーディングするために、メディアコーダにおいて適用されるＤＣＴを備え得る。たとえば、非ダイアディック偶数サイズＤＣＴは、６×６、１０×１０、１２×１２、または２の倍数であるが２のべき乗ではない同様のサイズのＤＣＴを備え得る。本開示の技法に従って実装されたＤＣＴは、圧縮効率と実装複雑さとの観点から効率的であり得る。圧縮効率は、後続の量子化およびロスレス統計的コーディングプロセスの適用中に達成され得るデータ圧縮の量または割合を指す。実装複雑さは、所与の非ダイアディックサイズＤＣＴを実装するために、メディアコーダにおいて必要であり得る数学演算の数およびタイプを指す。場合によっては、本開示の技法に従って実装された非ダイアディック偶数サイズＤＣＴは、圧縮効率と実装複雑さの両方の観点からダイアディックサイズＤＣＴよりも効率的に機能し得る。
【０００７】
一態様では、タイプＩＩのスケーリングされた離散コサイン変換（ＤＣＴ−ＩＩ）を実行する方法は、装置を用いて、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、上記装置を用いて、スケーリングされたＤＣＴ−ＩＩを実行することとを備える。スケーリングされたＤＣＴ−ＩＩを実行することは、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させることと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することとを含む。スケーリングされたＤＣＴ−ＩＩを実行することはまた、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算することと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替えることとを含む。
【０００８】
別の態様では、メディアコーディングデバイスは、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断し、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、スケーリングされたＤＣＴ−ＩＩを実行する、スケーリングされたＤＣＴ−ＩＩユニットを備える。スケーリングされたＤＣＴ−ＩＩユニットは、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、バタフライユニットが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライユニットと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させる順序逆転ユニットと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算する再帰的減算ユニットとを含む。スケーリングされたＤＣＴ−ＩＩユニットはまた、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算する、スケーリングされたサブＤＣＴ−ＩＩユニットと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算する完全サブＤＣＴ−ＩＩＩユニットとを含む。スケーリングされたＤＣＴ−ＩＩユニットは、次いで、ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替える。
【０００９】
別の態様では、非一時的コンピュータ可読媒体は、プロセッサに、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、スケーリングされたＤＣＴ−ＩＩを実行することとを行わせるための命令を備える。プロセッサにスケーリングされたサブＤＣＴ−ＩＩを実行させる命令は、プロセッサに、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させることと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算することと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替えることとを行わせる命令を含む。
【００１０】
別の態様では、装置は、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断するための手段と、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、スケーリングされたＤＣＴ−ＩＩを実行するための手段とを備える。スケーリングされたＤＣＴ−ＩＩを実行するための手段は、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するための手段であって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算するための手段と、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させるための手段と、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算するための手段とを含む。スケーリングされたＤＣＴ−ＩＩを実行するための手段はまた、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算するための手段と、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算するための手段と、ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替えるための手段とを含む。
【００１１】
別の態様では、タイプＩＩの完全離散コサイン変換（ＤＣＴ−ＩＩ）を実行する方法は、装置を用いて、実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、上記装置を用いて、完全ＤＣＴ−ＩＩを実行することとを備える。完全ＤＣＴ−ＩＩを実行することは、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させることと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することとを含む。完全ＤＣＴ−ＩＩを実行することはまた、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算することと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、出力の第１の完全セットを発生するために、出力の第１のセットに１つまたは複数のスケールファクタを乗算することと、ＤＣＴ−ＩＩの出力値を発生するために、出力の第１の完全セットと出力の第２のセットとを並べ替えることとを含む。
【００１２】
別の態様では、メディアコーディングデバイスは、実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断し、実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、完全ＤＣＴ−ＩＩを実行する、完全ＤＣＴ−ＩＩユニットを備える。完全ＤＣＴ−ＩＩは、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、バタフライユニットが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライユニットと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させる順序逆転ユニットと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算する再帰的減算ユニットとを含む。完全ＤＣＴ−ＩＩはまた、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算する、完全サブＤＣＴ−ＩＩユニットと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算する完全サブＤＣＴ−ＩＩＩユニットと、出力の第１の完全セットを発生するために、サブＤＣＴ−ＩＩＩの出力に１つまたは複数のスケールファクタを乗算するスケーリングユニットとを含む。完全ＤＣＴ−ＩＩユニットは、次いで、ＤＣＴ−ＩＩの出力値を発生するために、出力の第１の完全セットと出力の第２のセットとを並べ替える。
【００１３】
別の態様では、非一時的コンピュータ可読媒体は、プロセッサに、実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、完全ＤＣＴ−ＩＩを実行することとを行わせるための命令を備える。プロセッサに完全ＤＣＴ−ＩＩを実行させる命令は、プロセッサに、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させることと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する完全サブＤＣＴ−ＩＩを計算することと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、出力の第１の完全セットを発生するために、出力の第１のセットに１つまたは複数のスケールファクタを乗算することと、ＤＣＴ−ＩＩの出力値を発生するために、出力の第１の完全セットおよび出力の第２のセットを並べ替えることとを行わせる命令を含む。
【００１４】
別の態様では、装置は、実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断するための手段と、実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、完全ＤＣＴ−ＩＩを実行するための手段とを備える。完全ＤＣＴ−ＩＩを実行するための手段は、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するための手段であって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算するための手段と、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させるための手段と、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算するための手段とを含む。完全ＤＣＴ−ＩＩを実行するための手段はまた、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算するための手段と、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算するための手段と、出力の第１の完全セットを発生するために、出力の第１のセットに１つまたは複数のスケールファクタを乗算するための手段と、ＤＣＴ−ＩＩの出力値を発生するために、出力の第１の完全セットと出力の第２のセットとを並べ替えるための手段とを含む。
【００１５】
別の態様では、タイプＩＩＩの完全離散コサイン変換（ＤＣＴ−ＩＩＩ）を実行する方法は、装置を用いて、実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断することと、実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であると判断したことに応答して、上記装置を用いて、ＤＣＴ−ＩＩＩを実行することとを備える。ＤＣＴ−ＩＩＩを実行することは、タイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行することを含み、ＤＣＴ−ＩＩを実行することは、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させることと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することとを含む。ＤＣＴ−ＩＩを実行することはまた、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、ＤＣＴ−ＩＩの出力値を発生するために、それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替えることとを含む。
【００１６】
別の態様では、メディアコーディングデバイスは、実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断し、実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であると判断したことに応答して、ＤＣＴ−ＩＩＩを実行する、ＤＣＴ−ＩＩＩユニットを備える。ＤＣＴ−ＩＩＩユニットは、ＤＣＴ−ＩＩユニットによって実行されるタイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行する。ＤＣＴ−ＩＩを実行するために、ＤＣＴ−ＩＩユニットは、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、バタフライユニットが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライユニットと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させる順序逆転ユニットと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算する再帰的減算ユニットと、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算する、サブＤＣＴ−ＩＩユニットと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算するサブＤＣＴ−ＩＩＩユニットとを含む。ＤＣＴ−ＩＩユニットは、ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替える。
【００１７】
別の態様では、非一時的コンピュータ可読媒体は、プロセッサに、実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断することと、実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であると判断したことに応答して、ＤＣＴ−ＩＩＩを実行することとを行わせるための命令を備える。命令は、プロセッサに、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させることと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、ＤＣＴ−ＩＩの出力値を発生するために、それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替えることとによって実行されたタイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行することによって、ＤＣＴ−ＩＩＩを実行させる。
【００１８】
別の態様では、装置は、実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断するための手段と、実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、ＤＣＴ−ＩＩＩを実行するための手段とを備える。ＤＣＴ−ＩＩＩを実行するための手段は、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、バタフライが、入力の第１のサブセットを相互加算する第１の部分と、入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させることと、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、入力の第１のサブセットを受信し、入力の第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、入力の再帰的に減算された第２のサブセットを受信し、入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、ＤＣＴ−ＩＩの出力値を発生するために、それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替えることとによって実行されたＤＣＴ−ＩＩの逆元を実行するための手段を含む。
【００１９】
本技法の１つまたは複数の態様の詳細を添付の図面および以下の説明に記載する。本技法の他の特徴、目的、および利点は、その説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００２０】
【図１】ビデオ符号化および復号システムを示すブロック図。
【図２】図１に示すビデオエンコーダの一例を示すブロック図。
【図３】図１のビデオデコーダの一例を示すブロック図。
【図４】本開示で説明する技法に従って実装された非ダイアディックサイズＤＣＴ−ＩＩユニットによって実行される例示的な再帰的反復を示すフローチャート。
【図５Ａ】サイズｎの偶数サイズ完全ＤＣＴ−ＩＩを実行するための、本開示で説明する再帰的技法の反復を示すブロック図。
【図５Ｂ】サイズｎの偶数サイズ完全ＤＣＴ−ＩＩを実行するための、本開示で説明する再帰的技法の反復を示すブロック図。
【図６】ダイアディックサイズＤＣＴ−ＩＩと非ダイアディックサイズＤＣＴ−ＩＩの両方の効率的な実装についての、実装複雑さに対するコーディング利得のグラフを示す図。
【図７】本開示で説明する技法に従って実装されたスケーリングされた非ダイアディックサイズＤＣＴ−ＩＩユニットによって実行される例示的な再帰的反復を示すフローチャート。
【図８】サイズｎの偶数サイズのスケーリングされたＤＣＴ−ＩＩを実行するための、本開示で説明する再帰的技法の反復を示すブロック図。
【発明を実施するための形態】
【００２１】
概して、本開示は、１つまたは複数の非ダイアディック偶数サイズ離散コサイン変換（ＤＣＴ）を使用してデータをコーディングするための技法を対象とする。本技法は、デジタルビデオ、画像、音声、および／またはオーディオデータなど、可視または可聴メディアデータを含む様々なデータを圧縮し、それによって、そのようなデータを表すそのような電気信号を、それらの電気信号のより効率的な処理、送信またはアーカイブのために圧縮信号に変換するために適用され得る。非ダイアディック偶数サイズＤＣＴは、２の倍数であるが２のべき乗ではないサイズを有するビデオブロックに適用されるＤＣＴを備える。たとえば、非ダイアディックサイズＤＣＴは、６×６、６×１０、１０×６、１０×１０、１０×１２、１２×１０、１２×１２、および２の倍数であるが２のべき乗ではない寸法を有する他の同様のサイズのＤＣＴを備え得る。以下でより詳細に説明するように、これらの非ダイアディック偶数サイズＤＣＴは、旧来、オーディオ、音声、画像およびビデオデータの圧縮のために使用される従来の４×４、８×８および１６×１６サイズのＤＣＴなど、ダイアディックサイズＤＣＴと比較して、実装複雑さと得られるデータ圧縮との観点から、より効率的であり得る。
【００２２】
上記で示したサイズは、ダイアディックか非ダイアディックかにかかわらず、個別のデータユニットに関して表される。例示のために、ビデオデータについては、しばしば、特にビデオ圧縮に関して、ビデオブロックとして説明する。ビデオブロックは、一般に、ビデオフレームの任意のサイズの部分を指し、ビデオフレームは、一連のピクチャまたは画像中のピクチャまたは画像を指す。各ビデオブロックは、一般に、色成分、たとえば、赤、青および緑（いわゆる「色度」または「クロマ」成分）または光度成分（いわゆる「ルーマ」成分）のいずれかを示す複数の個別のピクセルデータを備える。ピクセルデータの各セットは、ビデオブロック中に単一の１×１ポイントを備え、ビデオブロックに関する個別のデータユニットと考えられ得る。したがって、非ダイアディックサイズの６×６ビデオブロックは、たとえば、ピクセルデータの６つの列を備え、各列中にピクセルデータの６つの個別のセットがある。
【００２３】
ＤＣＴについては、通常、オーディオ、音声、画像またはビデオデータであるかどうかにかかわらず、ＤＣＴが処理することが可能であるデータブロックのサイズに関して説明する。たとえば、ＤＣＴが非ダイアディックの偶数サイズの６×６データブロックを処理することができる場合、ＤＣＴは６×６ＤＣＴと呼ばれることがある。その上、ＤＣＴは特定のタイプとして示され得る。８つの異なるタイプのＤＣＴのうちの最も一般的に採用されるタイプのＤＣＴは、「ＤＣＴ−ＩＩ」と示され得るタイプＩＩのＤＣＴである。しばしば、概括的にＤＣＴに言及するとき、そのような言及は、タイプＩＩのＤＣＴまたはＤＣＴ−ＩＩを指す。ＤＣＴ−ＩＩの逆元（inverse）は、同様に「ＤＣＴ−ＩＩＩ」と示され得るタイプＩＩＩのＤＣＴと呼ばれるか、または、ＤＣＴがＤＣＴ−ＩＩを指すという共通の理解があれば、「ＩＤＣＴ」と呼ばれ、「ＩＤＣＴ」中の「Ｉ」は逆元を示す。以下のＤＣＴへの言及はこの表記法に準拠し、ＤＣＴへの概括的言及は、別段に規定されていない限りＤＣＴ−ＩＩを指す。しかしながら、混乱を回避するために、ＤＣＴ−ＩＩを含むＤＣＴは、以下で、ほとんどの場合、対応するタイプ（ＩＩ、ＩＩＩなど）を示した状態で言及される。
【００２４】
本開示で説明する技法は、データの圧縮および／または復元を可能にするために、これらの非ダイアディックサイズＤＣＴ−ＩＩの効率的な実装を採用するエンコーダおよび／またはデコーダの両方を含む。この場合も、そのようなアルゴリズムを使用して達成される圧縮および復元は、物理的コンピューティングハードウェア、物理的伝送媒体（たとえば、銅、光ファイバ、ワイヤレス、または他のメディア）、および／またはストレージハードウェア（たとえば、磁気または光ディスクまたはテープ、あるいは様々なソリッドステートメディアのいずれか）を使用して、データを表す電気信号がより効率的に処理され、送信され、および／または記憶され得るように、それらの信号の物理的変換を可能にする。非ダイアディック偶数サイズＤＣＴの実装は、圧縮効率と実装複雑さとの観点から効率的であり、潜在的に最適である。圧縮効率は、後続の量子化およびロスレス統計的コーディングプロセスの適用中に達成され得るデータ圧縮の量または割合を指す。実装複雑さは、所与の非ダイアディックサイズＤＣＴを達成するために、メディアコーダ内に実装する必要があり得る数学演算の数およびタイプを指す。ビデオエンコーダおよび／またはデコーダに関して以下で説明するが、本技法は、他のメディアコーダに適用され得、オーディオ、音声または画像データなど、ＤＣＴ−ＩＩを使用する圧縮に好適な任意の形態のデータに適用され得る。
【００２５】
非ダイアディック偶数サイズＤＣＴ−ＩＩの実装は、概して再帰的プロセスを含む。本開示において使用する「再帰」という用語は、コンピュータサイエンスの文脈で知られている再帰を指す。この文脈における「再帰」という用語は、問題へのソリューションが、同じ問題のより小さいインスタンスへのソリューションに依存することを示唆する。たいていのコンピュータプログラミング言語は、機能がそれ自体を呼び出すかまたは起動することを可能にすることによって再帰を可能にする。本開示の技法に従って実装されたＤＣＴ−ＩＩは、ある時点においてより小さいサイズのＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをますますより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために再帰を採用し得る。例示のために、１２×１２データブロックに対して１２×１２ＤＣＴ−ＩＩを実行するために、本開示の技法に従って実装されたＤＣＴ−ＩＩは、１２×１２ＤＣＴ−ＩＩを、タイプＩＩが１つおよびタイプＩＩＩが１つの、２つの６×６ＤＣＴに分割し得る。実装は、次いで、６×６ＤＣＴ−ＩＩに対して実装自体を呼び出し、その後、実装は６×６ＤＣＴ−ＩＩを２つの３×３ＤＣＴ−ＩＩに分割する。実装は、次いで、１２×１２データブロックの１つの部分について６×６ＤＣＴ−ＩＩＩを計算し、１２×１２データブロックの別の部分について第１の３×３ＤＣＴ−ＩＩを計算し、１２×１２データブロックのさらに別の部分について第２の３×３ＤＣＴ−ＩＩを計算する。この再帰的プロセスによって、ＤＣＴ−ＩＩ実装は、この実装が非ダイアディックの偶数サイズのデータブロックについてＤＣＴ−ＩＩを計算することができるという点で、可変サイズのＤＣＴ−ＩＩ実装と考えられ得る。
【００２６】
いくつかの態様では、本開示の技法に従って実装されたＤＣＴ−ＩＩはスケーリングされ得、それは、いくつかのファクタを組み込まない実装を指す。これらのファクタが除去されると考えると、入力データを正確に表さないＤＣＴ係数はスケーリングされるので、スケーリングされたＤＣＴ−ＩＩ実装は、これらのＤＣＴを出力する。スケーリングされた実装は、除去されたファクタを適用することができる、量子化などの後続のプロセスを含むコーディングアプリケーションにおいて、しばしば好適である。量子化は、一般に多くの乗算と加算とを含むので、これらのファクタを量子化に組み込むことは、概して実装複雑さを実質的に増加させない。したがって、スケーリングされたＤＣＴ−ＩＩ実装は、実装複雑さを低減するとともに、対応する完全またはスケーリングされていないＤＣＴ−ＩＩ実装と同じコーディング利得を与えるので、これらの実装は一般に好適である。スケーリングされた実装に関して以下で概して説明するが、本開示の技法に従って完全ＤＣＴ−ＩＩを実装し得る。
【００２７】
図１は、ビデオ符号化および復号システム１０を示すブロック図である。図１に示すように、システム１０は、通信チャネル１６を介して符号化ビデオを受信ハードウェアデバイス１４に送信するソースハードウェアデバイス１２を含む。ソースデバイス１２は、ビデオソース１８とビデオエンコーダ２０と送信機２２とを含み得る。宛先デバイス１４は、受信機２４と、ビデオデコーダ２６と、ビデオディスプレイデバイス２８とを含み得る。
【００２８】
図１の例では、通信チャネル１６は、無線周波数（ＲＦ）スペクトルまたは１つまたは複数の物理的伝送線路など、ワイヤレスまたはワイヤードの任意の通信媒体、あるいはワイヤレスおよびワイヤードの媒体の任意の組合せを備え得る。チャネル１６は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースのネットワークの一部を形成し得る。通信チャネル１６は、一般に、ビデオデータをソースデバイス１２から受信デバイス１４に送信するのに好適な任意の通信媒体、または様々な通信媒体の集合体を表す。
【００２９】
ソースデバイス１２は、宛先デバイス１４に送信するためのビデオを発生する。ただし、場合によっては、デバイス１２、１４は、実質的に対称に動作し得る。たとえば、デバイス１２、１４の各々は、ビデオ符号化および復号構成要素を含み得る。したがって、システム１０は、たとえば、ビデオストリーミング、ビデオブロードキャスト、またはビデオ電話のためのビデオデバイス１２とビデオデバイス１４との間の一方向または双方向のビデオ送信をサポートし得る。他のデータ圧縮およびコーディング適用例の場合、デバイス１２、１４は、画像、音声またはオーディオデータ、あるいはビデオ、画像、音声およびオーディオデータのうちの２つ以上の組合せなど、他のタイプのデータを送信および受信、または交換するように構成され得る。したがって、ビデオ適用例の説明は例示のために与えたものであり、本明細書で広く説明する本開示の様々な態様を限定するものと見なすべきではない。
【００３０】
ビデオソース１８は、１つまたは複数のビデオカメラ、あらかじめキャプチャされたビデオを含んでいるビデオアーカイブ、またはビデオコンテンツプロバイダからのライブビデオフィードなど、ビデオキャプチャデバイスを含み得る。さらなる代替として、ビデオソース１８はソースビデオとしてのコンピュータグラフィックベースのデータ、またはライブビデオとコンピュータ発生ビデオとの組合せを発生し得る。場合によっては、ビデオソース１８がカメラである場合、ソースデバイス１２および受信デバイス１４は、いわゆるカメラ付き携帯電話またはビデオ電話を形成し得る。したがって、いくつかの態様では、ソースデバイス１２、受信デバイス１４またはその両方は、モバイル電話など、ワイヤレス通信デバイスハンドセットを形成し得る。各場合において、キャプチャされたビデオ、プリキャプチャされたビデオ、またはコンピュータ発生ビデオは、送信機２２とチャネル１６と受信機２４とを介してビデオソースデバイス１２からビデオ受信デバイス１４のビデオデコーダ２６に送信するために、ビデオエンコーダ２０によって符号化され得る。ディスプレイデバイス２８は、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイまたは有機発光ダイオード（ＯＬＥＤ）ディスプレイなどの様々なディスプレイデバイスのいずれかを含み得る。
【００３１】
ビデオエンコーダ２０およびビデオデコーダ２６は、空間、時間および／または信号対雑音比（ＳＮＲ）スケーラビリティのためのスケーラブルビデオコーディングをサポートするように構成され得る。いくつかの態様では、ビデオエンコーダ２０およびビデオデコーダ２２は、ファイングラニュラリティＳＮＲスケーラビリティ（ＦＧＳ）コーディングをサポートするように構成され得る。エンコーダ２０およびデコーダ２６は、ベースレイヤおよび１つまたは複数のスケーラブルエンハンスメントレイヤの符号化、送信および復号をサポートすることによって様々な程度のスケーラビリティをサポートし得る。スケーラブルビデオコーディングの場合、ベースレイヤは最小品質レベルでビデオデータを搬送する。１つまたは複数のエンハンスメントレイヤは追加のビットストリームを搬送して、より高い空間的レベル、時間的レベルおよび／またはＳＮＲレベルをサポートする。
【００３２】
ビデオエンコーダ２０およびビデオデコーダ２６は、ＭＰＥＧ−２、ＭＰＥＧ−４、ＩＴＵ−Ｔ  Ｈ．２６３、またはＩＴＵ−Ｔ  Ｈ．２６４／ＭＰＥＧ−４  Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ（ＡＶＣ）などのビデオ圧縮規格に従って動作し得る。図１には示されていないが、いくつかの態様では、ビデオエンコーダ２０およびビデオデコーダ２６は、それぞれオーディオエンコーダおよびデコーダと統合され、適切なＭＵＸ−ＤＥＭＵＸユニット、または他のハードウェアおよびソフトウェアを含み、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理し得る。適用可能な場合、ＭＵＸ−ＤＥＭＵＸユニットはＩＴＵ  Ｈ．２２３マルチプレクサプロトコル、またはユーザデータグラムプロトコル（ＵＤＰ）などの他のプロトコルに準拠し得る。
【００３３】
いくつかの態様では、ビデオブロードキャストに関して、本開示で説明する技法は、たとえば、ワイヤレスビデオブロードキャストサーバまたはワイヤレス通信デバイスハンドセットを介して、Ｆｏｒｗａｒｄ  Ｌｉｎｋ  Ｏｎｌｙ（ＦＬＯ）  Ａｉｒ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、すなわちＴｅｃｈｎｉｃａｌ  Ｓｔａｎｄａｒｄ  ＴＩＡ−１０９９（「ＦＬＯ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」）として発表された「Ｆｏｒｗａｒｄ  Ｌｉｎｋ  Ｏｎｌｙ  Ａｉｒ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｆｏｒ  Ｔｅｒｒｅｓｔｒｉａｌ  Ｍｏｂｉｌｅ  Ｍｕｌｔｉｍｅｄｉａ  Ｍｕｌｔｉｃａｓｔ」を使用して、ｔｅｒｒｅｓｔｒｉａｌ  ｍｏｂｉｌｅ  ｍｕｌｔｉｍｅｄｉａ  ｍｕｌｔｉｃａｓｔ（ＴＭ３）システムでリアルタイムビデオサービスを配信するためのＨ．２６４ビデオコーディングを拡張するために適用され得る。ＦＬＯ  Ｓｐｅｃｉｆｉｃａｔｉｏｎは、ビットストリームシンタックスおよびセマンティックス、ならびにＦＬＯ  Ａｉｒ  Ｉｎｔｅｒｆａｃｅに適した復号プロセスを定義する例を含む。代替的に、ビデオは、ＤＶＢ−Ｈ（ｄｉｇｉｔａｌ  ｖｉｄｅｏ  ｂｒｏａｄｃａｓｔ−ｈａｎｄｈｅｌｄ）、ＩＳＤＢ−Ｔ（ｉｎｔｅｇｒａｔｅｄ  ｓｅｒｖｉｃｅｓ  ｄｉｇｉｔａｌ  ｂｒｏａｄｃａｓｔ−ｔｅｒｒｅｓｔｒｉａｌ）、またはＤＭＢ（ｄｉｇｉｔａｌ  ｍｅｄｉａ  ｂｒｏａｄｃａｓｔ）などの他の規格に従ってブロードキャストされ得る。したがって、ソースデバイス１２は、モバイルワイヤレス端末、ビデオストリーミングサーバ、またはビデオブロードキャストサーバであり得る。ただし、本開示で説明する技法は、特定のタイプのブロードキャスト、マルチキャスト、またはポイントツーポイントシステムに限定されない。ブロードキャストの場合、ソースデバイス１２は、ビデオデータのいくつかのチャネルを、その各々が図１の受信デバイス１４と同様であり得る複数の受信デバイスにブロードキャストし得る。
【００３４】
ビデオエンコーダ２０およびビデオデコーダ２６はそれぞれ、１つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せとして実装され得る。したがって、ビデオエンコーダ２０およびビデオデコーダ２６の各々は、集積回路（ＩＣ）チップまたはデバイスとして少なくとも部分的に実装され、１つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれかは、複合エンコーダ／デコーダ（コーデック）の一部としてそれぞれモバイルデバイス、加入者デバイス、ブロードキャストデバイス、サーバなどに統合され得る。さらに、ソースデバイス１２および受信デバイス１４はそれぞれ、符号化ビデオの送信および受信のために適切な変調、復調、周波数変換、フィルタ処理、および増幅器構成要素を含み、適用可能な場合、ワイヤレス通信をサポートするために十分な無線周波（ＲＦ）ワイヤレス構成要素およびアンテナを含み得る。ただし、説明しやすいように、そのような構成要素は図１に示していない。
【００３５】
ビデオシーケンスは一連のビデオフレームを含む。ビデオエンコーダ２０は、ビデオデータを符号化するために個々のビデオフレーム内のピクセルのブロックに作用する。ビデオブロックは、固定サイズまたは変動サイズを有し得、指定のコーディング規格に応じてサイズが異なり得る。各ビデオフレームは一連のスライスを含む。各スライスは一連のマクロブロックを含み得、それらはサブブロック中に配置され得る。一例として、ＩＴＵ−Ｔ  Ｈ．２６４規格は、ルーマ成分では１６×１６、８×８、４×４、およびクロマ成分では８×８など、様々なダイアディックブロックサイズのイントラ予測、ならびにルーマ成分では１６×１６、１６×８、８×１６、８×８、８×４、４×８および４×４、およびクロマ成分では対応するスケーリングされたサイズなど、様々なブロックサイズのインター予測をサポートする。
【００３６】
より小さいビデオブロックは、概して、より良好な解像度を与えることができ、より高い詳細レベルを含むビデオフレームのロケーションに対して使用され得る。一般に、マクロブロック（ＭＢ）および様々なサブブロックは、概してビデオブロックを表すと考えられ得る。さらに、スライスは、ＭＢおよび／またはサブブロックなど一連のビデオブロックを表すと考えられ得る。各スライスは単独で復号可能なユニットであり得る。予測の後に、ダイアディックまたは非ダイアディックサイズの残差ブロックに対して変換が実行され得、イントラ１６×１６予測モードが使用される場合は、クロマ成分またはルーマ成分用の４×４ブロックのＤＣＴ係数に追加の変換が適用され得る。
【００３７】
図１のシステム１０のビデオエンコーダ２０および／またはビデオデコーダ２６は、それぞれ非ダイアディックサイズＤＣＴ−ＩＩの実装とその逆元（たとえば、非ダイアディックサイズＤＣＴ−ＩＩＩ）とを含むように構成され得、非ダイアディックサイズＤＣＴ−ＩＩは、本開示で説明する技法に従って実装される。ＩＴＵ−Ｔ  Ｈ．２６４規格は、ルーマ成分では１６×１６、８×８、４×４、およびクロマ成分では８×８など、様々なダイアディックブロックサイズのイントラ予測をサポートするが、コーディング効率を改善するためのこの規格の改訂が現在進行中である。１つの改訂された規格は、ＩＴＵ−Ｔ  Ｈ．２６５または単にＨ．２６５と呼ばれることがある（時々、次世代ビデオコーディングまたはＮＧＶＣと呼ばれることがある）。図６に関して以下で説明するように、タイプＩＩの非ダイアディックサイズＤＣＴ（「ＤＣＴ−ＩＩ」）は、コーディング効率を改善するとともに、同様のダイアディックサイズＤＣＴ−ＩＩよりも複雑さが少ない非ダイアディックサイズＤＣＴ−ＩＩのスケーリングされた実装も促進し得る。したがって、ＩＴＵ−Ｔ  Ｈ．２６５および他の発展的規格または仕様は、コーディング効率を改善するために非ダイアディックサイズＤＣＴ−ＩＩの実装を検討し得る。
【００３８】
本開示で説明する技法によれば、非ダイアディックサイズＤＣＴ−ＩＩのスケーリングされた実装と完全実装の両方は、偶数サイズＤＣＴ−ＩＩを実行するために再帰的プロセスを採用し得る。本開示において使用する「再帰」という用語は、コンピュータサイエンスの文脈で知られている再帰を指す。この文脈における「再帰」という用語は、問題へのソリューションが、同じ問題のより小さいインスタンスへのソリューションに依存することを示唆する。たいていのコンピュータプログラミング言語は、機能がそれ自体を呼び出すかまたは起動することを可能にすることによって再帰を可能にする。本開示の技法に関して、再帰的プロセスは、偶数サイズＤＣＴ−ＩＩを、最適でないとしても効率的に計算するために、偶数サイズＤＣＴ−ＩＩの再帰的分割を含む。
【００３９】
本開示の技法に従って実装されたＤＣＴ−ＩＩは、ある時点においてより小さいサイズのＤＣＴ−ＩＩが解決され得るまで、より大きいサイズのＤＣＴ−ＩＩをますますより小さいサイズのＤＣＴ−ＩＩに再帰的に分割するために再帰を採用し得る。例示のために、１２×１２データブロックに対して１２×１２ＤＣＴ−ＩＩを実行するために、本開示の技法に従って実装されたＤＣＴ−ＩＩは、１２×１２ＤＣＴ−ＩＩを、タイプＩＩが１つおよびタイプＩＩＩが１つの、２つの６×６ＤＣＴに分割し得る。実装は、次いで、６×６ＤＣＴ−ＩＩを計算するために再帰し、その後、実装は６×６ＤＣＴ−ＩＩを２つの３×３ＤＣＴ−ＩＩに分割する。実装は、次いで、１２×１２データブロックの１つの部分について６×６ＤＣＴ−ＩＩＩを計算し、１２×１２データブロックの別の部分について第１の３×３ＤＣＴ−ＩＩを計算し、１２×１２データブロックのさらに別の部分について第２の３×３ＤＣＴ−ＩＩを計算する。この再帰的プロセスによって、ＤＣＴ−ＩＩ実装は、この実装が非ダイアディックの偶数サイズのデータブロックについてＤＣＴ−ＩＩを計算することができるという点で、可変サイズのＤＣＴ−ＩＩ実装と考えられ得る。
【００４０】
いくつかの態様では、本開示の技法に従って実装されたＤＣＴ−ＩＩはスケーリングされ得、それは、いくつかのファクタを組み込まない実装を指す。これらのファクタが除去されると考えると、入力データを正確に表さないＤＣＴ係数はスケーリングされるので、スケーリングされたＤＣＴ−ＩＩ実装は、これらのＤＣＴを出力する。スケーリングされた実装は、除去されたファクタを適用することができる、量子化などの後続のプロセスを含むコーディングアプリケーションにおいて、しばしば好適である。量子化は、一般に多くの乗算と加算とを含むので、これらのファクタを量子化に組み込むことは、概して実装複雑さを実質的に増加させない。したがって、スケーリングされたＤＣＴ−ＩＩ実装は、実装複雑さを低減するとともに、対応する完全またはスケーリングされていないＤＣＴ−ＩＩ実装と同じコーディング利得を与えるので、これらの実装は一般に好適である。スケーリングされた実装に関して以下で概して説明するが、本開示の技法に従って完全ＤＣＴ−ＩＩを実装し得る。
【００４１】
概して、本開示の技法に従って実装されたＤＣＴ−ＩＩによって実行される演算は、最初に、実行すべきＤＣＴ−ＩＩが２の倍数のサイズであるかどうかを判断することを含む。言い換えれば、本開示で説明するＤＣＴ−ＩＩ実装は、実行すべきＤＣＴ−ＩＩが２の倍数でないときを識別することによって再帰的反復からの出口を与える。実行すべきＤＣＴ−ＩＩが２の倍数でない場合、再帰的反復は終了し、２のべき乗でない、実行すべきＤＣＴ−ＩＩが計算される。実行すべきＤＣＴ−ＩＩが２の倍数のサイズであるという判断に応答して、ＤＣＴ−ＩＩ実装は、最初に、ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算する。バタフライは、ＤＣＴ−ＩＩ実装への入力の第１のサブセットを相互加算する第１の部分と、ＤＣＴ−ＩＩ実装への入力の第２のサブセットを相互減算する第２の部分とを含む。
【００４２】
バタフライを計算した後、ＤＣＴ−ＩＩ実装は、入力の逆順の第２のサブセットを発生するために、相互減算された入力の第２のサブセットの順序を逆転させる。ＤＣＴ−ＩＩ実装は、次いで、入力の再帰的に減算された第２のサブセットを発生するために、入力の逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算する。計算された後、ＤＣＴ−ＩＩ実装は、次いで、入力の第１のサブセットを受信し、その入力の第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算する。このサブＤＣＴ−ＩＩを計算するために、ＤＣＴ−ＩＩ実装は再帰し得、その後、ＤＣＴ−ＩＩ実装は、サブＤＣＴ−ＩＩを計算するために、上記で説明したステップを実行する。
【００４３】
再び例示するために、ＤＣＴ−ＩＩ実装は、残差ビデオデータを表す１２×１２データブロックを受信し得る。残差ビデオデータの１２×１２ブロックに対して１２×１２ＤＣＴ−ＩＩを実行するために、ＤＣＴ−ＩＩ実装は、上記で言及したサブＤＣＴ−ＩＩの一例である６×６ＤＣＴ−ＩＩを計算し得る。この６×６ＤＣＴ−ＩＩを計算するために、ＤＣＴ−ＩＩ実装は、最初に、このサブＤＣＴ−ＩＩが２の倍数のサイズであるかどうかを判断し得る。６×６ＤＣＴ−ＩＩが２の倍数のサイズであるとすれば、ＤＣＴ−ＩＩ実装は、６×６ＤＣＴ−ＩＩのサブＤＣＴ−ＩＩであるサイズ３×３の別のサブＤＣＴ−ＩＩを計算することを含む、上記の計算と、逆転と、他の演算とのすべてを実行し得る。再び、ＤＣＴ−ＩＩ実装は、この場合、３×３サブＤＣＴ−ＩＩが２の倍数のサイズではないと判断することを除いて、３×３サブＤＣＴ−ＩＩを計算するために再帰し得る。この判断の結果として、ＤＣＴ−ＩＩ実装は、３×３ＤＣＴ−ＩＩの行列係数を記憶するライブラリまたは他のデータストアを参照することによって、３×３ＤＣＴ−ＩＩを直接計算する。ＤＣＴ−ＩＩ実装は、次いで、前の再帰的反復に戻り、６×６サブＤＣＴ−ＩＩを計算するために３×３ＤＣＴ−ＩＩＩを計算する。再びこの３×３ＤＣＴ−ＩＩＩを計算するために、ＤＣＴ−ＩＩ実装は、３×３ＤＣＴ−ＩＩＩの行列係数を記憶するライブラリまたはデータストアにアクセスする。
【００４４】
ＤＣＴ−ＩＩ実装は、次いで、以下でより詳細に説明するように、３×３ＤＣＴ−ＩＩと３×３ＤＣＴ−ＩＩＩの両方を計算することによって６×６ＤＣＴ−ＩＩを解決し、前の再帰的反復に戻る。戻った後、ＤＣＴ−ＩＩ実装は、入力の再帰的に減算された第２のサブセットを受信し、その入力の再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サイズ６×６の完全サブＤＣＴ−ＩＩＩを計算する。再び、ＤＣＴ−ＩＩ実装は、６×６ＤＣＴ−ＩＩＩの行列係数を記憶するライブラリまたは他のデータストアにアクセスすることによって、この６×６ＤＣＴ−ＩＩＩを解決し得る。ＤＣＴ−ＩＩ実装は、次いで、ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の第１および第２のセットを並べ替える。
【００４５】
特定の形態の変換、たとえば、ＤＣＴに関して本開示で説明するが、本技法は、空間領域から周波数領域にデータを変換することが可能である、他の偶数サイズの変換の実装を生成するために適用され得る。ただし、場合によっては、本技法は、ロケーションを考慮に入れない変換にのみ適用され得る。すなわち、本技法は、ウェーブレット変換など、空間的に局在化された変換には適用することができない。その上、非ダイアディックサイズＤＣＴ−ＩＩに関して説明するが、本開示の技法に従って実装されたＤＣＴ−ＩＩは、ダイアディックサイズ変換と非ダイアディックサイズ変換の両方が上記の再帰的プロセスを可能にするように偶数サイズであるとすれば、これらの変換にも適用され得る。
【００４６】
図２は、図１に示すビデオエンコーダ２０の一例を示すブロック図である。ビデオエンコーダ２０は、少なくとも部分的に、まとめて集積回路デバイスと呼ばれることがある１つまたは複数の集積回路デバイスとして形成され得る。いくつかの態様では、ビデオエンコーダ２０は、ワイヤレス通信デバイスハンドセットまたはブロードキャストサーバの一部を形成し得る。ビデオエンコーダ２０は、ビデオフレーム内のブロックのイントラコーディングおよびインターコーディングを実行し得る。イントラコーディングは、所与のビデオフレーム内のビデオの空間的冗長性を低減または除去するために空間的予測に依拠する。インターコーディングは、ビデオシーケンスの隣接フレーム内のビデオの時間的冗長性を低減または除去するために時間的予測に依拠する。インターコーディングの場合、ビデオエンコーダ２０は、隣接フレーム間でビデオブロックを一致させる動作を追跡するために動き推定を実行する。
【００４７】
図２に示すように、ビデオエンコーダ２０は、符号化すべきビデオフレーム内の現在ビデオブロック３０を受信する。図２の例では、ビデオエンコーダ２０は、動き推定ユニット３２と、参照フレームストア３４と、動き補償ユニット３６と、ブロック変換ユニット３８と、量子化ユニット４０と、逆量子化ユニット４２と、逆変換ユニット４４と、エントロピーコーディングユニット４６とを含む。ブロッキングアーティファクトを除去するために、ループ内またはポストループデブロッキングフィルタ（図示せず）がフィルタブロックに適用され得る。ビデオエンコーダ２０はまた、加算器４８と加算器５０とを含む。図２は、ビデオブロックのインターコーディングのためのビデオエンコーダ２０の時間的予測構成要素を示す。説明しやすいように図２には示されていないが、ビデオエンコーダ２０は、いくつかのビデオブロックのイントラコーディングのための空間的予測構成要素をも含み得る。
【００４８】
動き推定ユニット３２は、１つまたは複数の動きベクトルを発生するためにビデオブロック３０を１つまたは複数の隣接ビデオフレーム中のブロックと比較する。以前に符号化されたブロックから再構成されたビデオブロックを記憶するために任意のタイプのメモリまたはデータ記憶デバイスを備え得る参照フレームストア３４から、１つまたは複数の隣接フレームが検索され得る。動き推定は、可変サイズ、たとえば、１６×１６、１６×８、８×１６、８×８、またはより小さいブロックサイズ、ならびに６×６、１０×１０、１２×１２など、非ダイアディックサイズのブロックに対して実行され得る。動き推定ユニット３２は、たとえば、レートひずみモデルに基づいて現在ビデオブロック３０に最もぴったり一致する隣接フレーム中の１つまたは複数のブロックを識別し、隣接フレーム中のブロックと現在ビデオブロックとの間の変位を判断する。これに基づいて、動き推定ユニット３２は、現在ビデオブロック３０と、現在ビデオブロック３０をコーディングするために使用される参照フレームからの１つまたは複数の一致するブロックとの間の変位の大きさおよび軌道を示す、１つまたは複数の動きベクトル（ＭＶ）を生成する。一致する１つまたは複数のブロックは、コーディングすべきブロックのインターコーディングのための予測（predictive）（または予測（prediction））ブロックとして働くことになる。
【００４９】
動きベクトルは、ハーフもしくはクォータピクセル精度、またはさらにより微細な精度を有し得、それによりビデオエンコーダ２０は、整数ピクセルロケーションよりも高い精度で動きを追跡し、より良い予測ブロックを取得することが可能になる。端数のピクセル値をもつ動きベクトルを使用するとき、動き補償ユニット３６中で補間演算が実行される。動き推定ユニット３２は、レートひずみモデルなど、いくつかの基準を使用して、ビデオブロックについての最良のブロック区分および１つまたは複数の動きベクトルを識別する。たとえば、双方向予測の場合、複数の動きベクトルがあり得る。得られたブロック区分および動きベクトルを使用して、動き補償ユニット３６は予測ビデオブロックを形成する。
【００５０】
ビデオエンコーダ２０は、加算器４８において、元の現在ビデオブロック３０から、動き補償ユニット３６によって生成された予測ビデオブロックを減算することによって残差ビデオブロックを形成する。ブロック変換ユニット３８は、残差変換ブロック係数を生成する変換を適用する。図２に示すように、ブロック変換ユニット３８は、本開示で説明する技法に従って発生された少なくとも１つの非ダイアディックサイズＤＣＴ−ＩＩユニット５２を含む。非ダイアディックサイズＤＣＴ−ＩＩユニット５２は、以下に示すスケーリングされたＤＣＴまたは完全ＤＣＴのいずれかを表し得る。ＤＣＴ−ＩＩユニット５２は、本開示で説明する技法を実装するハードウェアモジュール、または（ソフトウェアコードまたは命令を実行するデジタル信号プロセッサまたはＤＳＰなど）ハードウェアおよびソフトウェア組合せモジュールを表す。ブロック変換ユニット３８は、非ダイアディックサイズＤＣＴ−ＩＩユニット５２を残差ブロックに適用して、残差変換係数の非ダイアディックサイズのブロックを生成する。ＤＣＴ−ＩＩユニット５２は、概して、残差ピクセルデータとして表される空間領域から、ＤＣＴ係数として表される周波数領域に残差ブロックを変換する。変換係数は、少なくとも１つのＤＣ係数と１つまたは複数のＡＣ係数とを含むＤＣＴ係数を備え得る。
【００５１】
ＤＣＴ−ＩＩユニット５２は、本開示の技法を実行して、残差データのダイアディックサイズのブロックと非ダイアディックサイズのブロックの両方を含む、残差データの偶数サイズのブロックを処理する。以下でより詳細に説明するように、ＤＣＴ−ＩＩユニット５２は、ＤＣＴ−ＩＩを計算するために再帰的プロセスを実装し得、それにより、残差データの２０×２０ブロックなど、大きい残差データのブロックのためのＤＣＴ−ＩＩは、２０×２０データブロックを操作して、１０×１０ＤＣＴ−ＩＩと１０×１０ＤＣＴ−ＩＩＩとを使用して処理され得る２つの１０×１０データブロックを生成することによって計算され得る。ＤＣＴ−ＩＩユニット５２は、次いで、２０×２０ＤＣＴ−ＩＩを解決するのと同じ方式で１０×１０ＤＣＴ−ＩＩを計算する。すなわち、ＤＣＴ−ＩＩユニット５２は、１０×１０データブロックを操作して、５×５ＤＣＴ−ＩＩと５×５ＤＣＴ−ＩＩＩとを使用して処理され得る２つの５×５データブロックを生成する。奇数サイズＤＣＴ−ＩＩは、それ以上分割することができないので、ＤＣＴ−ＩＩユニット５２は、それ以上再帰することなしに、５×５データブロックについて５×５ＤＣＴ−ＩＩを直接計算する。ＤＣＴ−ＩＩユニット５２は、５×５ＤＣＴ−ＩＩの直接計算された結果とともにこの再帰的反復から戻り、他の５×５データブロックに適用されるときに、５×５ＤＣＴ−ＩＩＩの結果を直接計算する。ＤＣＴ−ＩＩユニット５２は、ＤＣＴ−ＩＩＩによって判断された結果を並べ替え、次いで、この再帰的反復から戻る。前の反復に戻った後、ＤＣＴ−ＩＩユニット５２は、残差データの他の１０×１０ブロックについて１０×１０ＤＣＴ−ＩＩＩを直接計算し、１０×１０ＤＣＴ−ＩＩＩを計算した結果を並べ替える。ＤＣＴ−ＩＩユニット５２は、次いで、１０×１０ＤＣＴ−ＩＩを計算することからの結果と、１０×１０ＤＣＴ−ＩＩＩを計算することの並べ替えられた結果とをＤＣＴ係数の２０×２０ブロックとして出力する。
【００５２】
量子化ユニット４０は、ビットレートをさらに低減するために残差変換ブロック係数を量子化する（たとえば、丸める）。上述のように、量子化ユニット４０は、場合によっては、スケーリングされたＤＣＴ−ＩＩユニット５２によるＤＣＴ−ＩＩの実装において考慮されないファクタを組み込むことによって、スケーリングされた偶数サイズＤＣＴ−ＩＩユニット５２のスケーリングされた性質を考慮する。量子化は一般に乗算を含むので、これらのファクタを量子化ユニット４０に組み込むことが量子化ユニット４０の実装複雑さを増加させることはない。この点において、スケーリングされた非ダイアディック偶数サイズＤＣＴ−ＩＩユニット５２は、量子化ユニット４０の実装複雑さを増加させることなしにＤＣＴ−ＩＩユニット５２の実装複雑さを減少させ、その結果、ビデオエンコーダ２０に関する実装複雑さが純減する。
【００５３】
エントロピーコーディングユニット４６は、量子化係数をエントロピーコーディングして、ビットレートをなお一層低減する。エントロピーコーディングユニット４６は、場合によってはエントロピーコーディングと呼ばれる統計的ロスレスコーディングを実行する。エントロピーコーディングユニット４６は、量子化ＤＣＴ係数の確率分布をモデル化し、モデル化された確率分布に基づいてコードブック（たとえば、ＣＡＶＬＣまたはＣＡＢＡＣ）を選択する。このコードブックを使用して、エントロピーコーディングユニット４６は、量子化ＤＣＴ係数を圧縮する方式で、各量子化ＤＣＴ係数のためのコードを選択する。例示のために、エントロピーコーディングユニット４６は、頻繁に発生する量子化ＤＣＴ係数のための（ビット換算で）短いコードワードと、より少ない頻度で発生する量子化ＤＣＴ係数のための（ビット換算で）より長いコードワードを選択し得る。短いコードワードが量子化ＤＣＴ係数よりも少ないビットを使用する限り、概して、エントロピーコーディングユニット４６は量子化ＤＣＴ係数を圧縮する。エントロピーコーディングユニット４６は、ビデオデコーダ２６に送られるビットストリームとしてエントロピーコード化係数を出力する。一般に、ビデオデコーダ２６は、図３の例に関して説明するように、ビットストリームからの符号化ビデオを復号および再構成するために逆演算を実行する。
【００５４】
再構成ユニット４２および逆変換ユニット４４は、それぞれ量子化係数を再構成し、逆変換を適用して、残差ブロックを再構成する。逆変換ユニット４４は、本開示で説明する技法に従って（ＤＣＴ−ＩＩＩとも呼ばれる）逆ＤＣＴ−ＩＩを実装する非ダイアディックＤＣＴ−ＩＩユニット５２の逆バージョンを含む。この逆バージョンは、図１の例に非ダイアディックサイズＤＣＴ−ＩＩＩユニット４５として示されており、非ダイアディックサイズＤＣＴ−ＩＩＩユニット４５は、図３に関して以下で説明する非ダイアディックサイズＤＣＴ−ＩＩＩユニット６８に実質的に同様であり得る。合計ユニット５０は、再構成された残差ブロックを、動き補償ユニット３６によって生成された動き補償予測ブロックに加算して、参照フレームストア３４に記憶するための再構成されたビデオブロックを生成する。再構成されたビデオブロックは、後続のビデオフレーム中のブロックを符号化するために動き推定ユニット３２および動き補償ユニット３６によって使用される。
【００５５】
図３は、図１のビデオデコーダ２６の一例を示すブロック図である。ビデオデコーダ２６は、少なくとも部分的に、まとめて集積回路デバイスと呼ばれることがある１つまたは複数の集積回路デバイスとして形成され得る。いくつかの態様では、ビデオデコーダ２６は、ワイヤレス通信デバイスハンドセットの一部を形成し得る。ビデオデコーダ２６はビデオフレーム内のブロックのイントラ復号およびインター復号を実行し得る。図３に示すように、ビデオデコーダ２６は、ビデオエンコーダ２０によって符号化された符号化ビデオビットストリームを受信する。図３の例では、ビデオデコーダ２６は、エントロピー復号ユニット５４と、動き補償ユニット５６と、再構成ユニット５８と、逆変換ユニット６０と、参照フレームストア６２とを含む。エントロピー復号ユニット６４は、コーディングするのに有用なデータを取得するために、メモリ６４に記憶された１つまたは複数のデータ構造にアクセスし得る。ビデオデコーダ２６は、加算器６６の出力をフィルタ処理するループ内デブロッキングフィルタ（図示せず）をも含み得る。ビデオデコーダ２６は加算器６６をも含む。図３は、ビデオブロックのインター復号のためのビデオデコーダ２６の時間的予測構成要素を示す。図３には示されていないが、ビデオデコーダ２６は、いくつかのビデオブロックのイントラ復号のための空間的予測構成要素をも含み得る。
【００５６】
エントロピー復号ユニット５４は、符号化ビデオビットストリームを受信し、そのビットストリームから、量子化残差係数および量子化パラメータ、ならびに、マクロブロックコーディングモード、および動きベクトルとブロック区分とを含み得る動き情報など、他の情報を復号する。動き補償ユニット５６は、動きベクトルと、ブロック区分と、参照フレームストア６２からの１つまたは複数の再構成された参照フレームとを受信して、予測ビデオブロックを生成する。
【００５７】
再構成ユニット５８は、量子化されたブロック係数を逆量子化（inverse quantize）、すなわち逆量子化（de-quantize）する。逆変換ユニット６０は、逆変換、たとえば、逆ＤＣＴを係数に適用して残差ブロックを生成する。より詳細には、逆変換ユニット６０は、逆変換ユニット６０が残差ブロックを生成するために係数に適用する非ダイアディックサイズＤＣＴ−ＩＩＩユニット６８を含む。非ダイアディックサイズＤＣＴ−ＩＩＩ６８は、スケーリングされたＤＣＴ−ＩＩＩ実装または完全ＤＣＴ−ＩＩＩ実装のいずれかを表す。図２に示す非ダイアディックサイズＤＣＴ−ＩＩユニット５２の逆元である非ダイアディックサイズＤＣＴ−ＩＩＩユニット６８は、周波数領域から空間領域に係数を変換して、残差ブロックを生成し得る。上記の量子化ユニット４０と同様に、再構成ユニット５８は、場合によっては、ほとんど実装複雑さの増加なしにファクタを再構成プロセスに組み込むことによって、ＤＣＴ−ＩＩＩユニット６８のスケーリングされた性質を考慮する。これらのファクタを含まないように、スケーリングされた非ダイアディックサイズＤＣＴ−ＩＩＩを計算することにより、実装複雑さが低減し、その結果、ビデオデコーダ２６に関する複雑さが純減し得る。
【００５８】
次いで、予測ビデオブロックは、加算器６６によって残差ブロックと加算されて、復号ブロックを形成する。復号されたブロックをフィルタ処理してブロッキングアーティファクトを除去するために、デブロッキングフィルタ（図示せず）が適用され得る。フィルタ処理されたブロックは次いで参照フレームストア６２に入れられ、参照フレームストア６２は、後続のビデオフレームの復号のために参照フレームを与え、また、ディスプレイデバイス２８（図１）を駆動するために復号ビデオを生成する。
【００５９】
図４は、本開示で説明する技法に従って実装された、図２の例に示されている非ダイアディックサイズＤＣＴ−ＩＩユニット５２などの非ダイアディックサイズＤＣＴ−ＩＩユニットによって実行される例示的な再帰的反復を示すフローチャートである。再帰的アルゴリズムまたはプロセスは、本開示で説明するアルゴリズムをプロセッサに実行させるコンピュータ可読記憶媒体に記憶された、コンピュータプログラムなど、複数の命令として実装され得る。代替的に、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、または他のタイプの同様のハードウェアなど、専用ハードウェアは、図４の例に関して説明する再帰的反復を使用して所与の非ダイアディックまたは偶数サイズのＤＣＴ−ＩＩを実行するように本開示の技法を実装し得る。本技法は、再帰的アルゴリズムの特定の実装に限定されるべきではない。
【００６０】
初めに、ＤＣＴ−ＩＩユニット５２は、実行すべき非ダイアディックＤＣＴ−ＩＩのサイズを判断する（７０）。通常、ＤＣＴ−ＩＩユニット５２は、ＤＣＴ−ＩＩユニット５２が受信した残差データのブロックのサイズに基づいてこの判断を行う。残差データブロックのサイズが２の倍数であると判断された場合（「ＹＥＳ」７２）、ＤＣＴ−ＩＩユニット５２は、ＤＣＴ−ＩＩユニット５２への入力値の相互加算と相互減算とを含むバタフライを計算し（７４）、入力値は、ビデオエンコーダの例では残差ブロック値を含み得る。バタフライは、概して、偶数入力と呼ばれることがある入力の第１のサブセットを相互減算および／または相互加算する偶数部分と、奇数入力と呼ばれることがある入力の第２のサブセットを相互減算および／または相互加算する奇数部分とを含む。ＤＣＴ−ＩＩユニット５２は、次いで、以下の図５Ｂの例に示すように、非ダイアディックサイズＤＣＴ−ＩＩの奇数部分についての奇数入力の順序を逆転させる（７６）。ＤＣＴ−ＩＩユニット５２は、また本開示の再帰的技法に従って、同じく図５Ｂの例に関して以下で示す、実装の奇数部分についての一連の再帰的減算を計算する（７８）。ＤＣＴ−ＩＩユニット５２は、次いで、再帰的減算の結果を入力として使用して、実行すべきＤＣＴ−ＩＩのサイズの１／２のサイズのサブＤＣＴ−ＩＩＩを直接計算する（８０）。ＤＣＴ−ＩＩユニット５２は、次いで、サブＤＣＴ−ＩＩＩを計算した結果にスケールファクタを適用する（８１）。
【００６１】
一方、奇数部分の順序を逆転させること、再帰的減算を計算すること、およびサブＤＣＴ−ＩＩＩを計算することの前、後、またはそれらと同時に、ＤＣＴ−ＩＩユニット５２は、バタフライ出力の偶数部分について、実行すべきＤＣＴ−ＩＩの判断されたサイズの１／２のサイズの完全サブＤＣＴ−ＩＩを計算する（８２）。バタフライ出力の偶数部分についてこのサブＤＣＴ−ＩＩを計算するために、ＤＣＴ−ＩＩユニット５２は、概して、別の再帰的反復を実行し、それにより、実行すべきＤＣＴ−ＩＩの判断されたサイズの１／２のサイズのサブＤＣＴ−ＩＩは、上記で説明したステップ７０〜８２を受ける。この再帰的反復は、サブＤＣＴ−ＩＩのうちの１つが奇数サイズになるまで繰り返し、その後、ＤＣＴ−ＩＩユニット５２は、このサブＤＣＴ−ＩＩのサイズが２の倍数でないことを判断し（「ＮＯ」７２）、奇数サイズのサブＤＣＴ−ＩＩを直接計算する（８４）。本明細書で使用する「直接計算する」という用語は、特定のサイズのＤＣＴ−ＩＩまたはＤＣＴ−ＩＩＩを判断するために使用される行列係数を記憶するライブラリまたはデータストアにアクセスするプロセスを指す。ＤＣＴ−ＩＩユニット５２は、サブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとを計算した後に、偶数部分（サブＤＣＴ−ＩＩ）からの結果と奇数部分（サブＤＣＴ−ＩＩＩ）からの結果とを合成する（８５）。
【００６２】
いずれの場合も、偶数サイズまたは奇数サイズの完全サブＤＣＴ−ＩＩを計算した後、あるいはサブＤＣＴ−ＩＩＩを計算した後に、再帰的反復は、結果をＤＣＴ係数として出力することによって終了する（８６）。単一の再帰的反復から戻ることは前の再帰的反復に戻ることになり得ると考えると、出力結果は記憶され得、その後、その再帰的反復が完了すると、より多くの結果が出力され、結果のすべてがＤＣＴ係数として出力されるまで、以下同様である。この点において、本技法は、特に、従来のダイアディックサイズのＤＣＴ−ＩＩと比較して、非ダイアディックサイズのＤＣＴ−ＩＩについて考えるとき、任意のサイズの入力データブロックに対してＤＣＴ−ＩＩを実行することが可能であるＤＣＴ−ＩＩ実装を提供するとともに、実装複雑さの減少とコーディング効率の増加とをも促進し得る。
【００６３】
図５Ａ〜図５Ｂは、サイズｎの偶数サイズ完全ＤＣＴ−ＩＩ９０を実行するための、本開示で説明する再帰的技法の反復を示すブロック図である。図５Ａは、サイズｎのＤＣＴ−ＩＩ９０を示すブロック図であり、ｎは２の倍数であると仮定される。図５Ａの例に示すように、偶数サイズ完全ＤＣＴ−ＩＩ９０は、ｘ（０）、．．．、ｘ（ｎ−１）と示されたｎ個の入力を受信し、ＣII（０）、．．．、ＣII（ｎ−１）と示されたｎ個のＤＣＴ−ＩＩ係数を判断する。上記で説明したように、ＤＣＴ−ＩＩユニット５２によって実装される本開示の再帰的技法は、初めに、実行すべきＤＣＴ−ＩＩ９０のサイズを判断する。偶数サイズＤＣＴ−ＩＩ９０の例に関して、ＤＣＴ−ＩＩユニット５２は、残差データのｎ×ｎブロックを受信し、偶数サイズＤＣＴ−ＩＩ９０によって表されるｎサイズのＤＣＴ−ＩＩを実行する必要があると判断する。
【００６４】
図５Ｂは、本開示で説明する再帰的技法の第１の反復に従ってＤＣＴ−ＩＩ９０を実行するためのＤＣＴ−ＩＩユニット５２による演算を示すブロック図である。ＤＣＴ−ＩＩユニット５２は、ｎが２の倍数であると判断した後、上記で説明した方式でバタフライ９２を計算する。ＤＣＴ−ＩＩユニット５２はまた、同じく上記で説明した方式で、サブＤＣＴ−ＩＩ９４とサブＤＣＴ−ＩＩＩ１００とを計算する。ＤＣＴ−ＩＩユニット５２は、バタフライ９２によって出力された値の第１のセットをサブＤＣＴ−ＩＩ９４に向け、バタフライ９２によって出力された値の第２のセットをサブＤＣＴ−ＩＩＩ１００に向ける。値の第１のセットは、偶数バタフライ相互加算および／または相互減算入力値ｘ（０）、ｘ（２）、．．．、ｘ（ｎ−２）を表し得、値の第２のセットは、奇数バタフライ相互加算および／また相互減算入力値ｘ（１）、ｘ（３）、．．．、ｘ（ｎ−１）を表し得る。ＤＣＴ−ＩＩユニット５２は、次いで、これらの奇数入力値の順序が逆転されるように順序逆転を判断する。順序逆転は、順序逆転ユニット１０２として示されている。ＤＣＴ−ＩＩユニット５２は、次に、奇数順序逆転入力値に対して再帰的減算を実行する再帰的減算ユニット１０６によって、説明した方式で再帰的減算を計算する。ＤＣＴ−ＩＩユニット５２は、次いで、上記で説明した方式で、図５Ｂの例ではサブＤＣＴ−ＩＩＩ１０８によって表されるｎ／２ポイントのサブＤＣＴ−ＩＩＩを計算する。サブＤＣＴ−ＩＩＩ１０８は、ファクタ１０４を乗算された奇数出力値を出力する。
【００６５】
ＤＣＴ−ＩＩユニット９２は、サブＤＣＴ−ＩＩ９４のサイズすなわちｎ／２が２の倍数であると仮定すると、別の再帰的反復によってｎ／２ポイントのサブＤＣＴ−ＩＩ９４を計算する。２の倍数であると判断された場合、ＤＣＴ−ＩＩユニット５２は、図５Ｂの例では非ダイアディックサイズＤＣＴ−ＩＩ９０の代わりにサブＤＣＴ−ＩＩを使用し、その後、ＤＣＴ−ＩＩユニット５２は、サブＤＣＴ−ＩＩ９４を計算するために、非ダイアディックサイズＤＣＴ−ＩＩ９０に関して上記で示したステップを繰り返す。これらの再帰的反復は、上記で説明したように、ＤＣＴ−ＩＩユニット９２が、後続のサブＤＣＴ−ＩＩのうちの１つが２の倍数のサイズでないと判断するまで続く。
【００６６】
所与の偶数サイズのＤＣＴ−ＩＩを実行するためのこのアルゴリズムがどのように数学的に導出され得るかを説明するために、以下の式について考える。最初に、タイプＩＩのＤＣＴおよび逆ＤＣＴ−ＩＩは、それぞれ以下の式（１）によって定義され得る。
【数１】
0005529257.tif 000002
【００６７】
ここで、ｋ＝０場合は正規化ファクタ
【数２】
0005529257.tif 000003
【００６８】
であり、他の場合はλ（ｋ）＝１である。
【００６９】
また、タイプＩＶのＤＣＴおよびその逆元は、それぞれ以下の式（２）によって数学的に定義され得る。
【数３】
0005529257.tif 000004
【００７０】
サブＤＣＴ−ＩＩおよびサブＤＣＴ−ＩＶへのＤＣＴ−ＩＩのデシメーションは、（省略された正規化ファクタをもつ）偶数サイズＤＣＴ−ＩＩ行列が、サブＤＣＴ−ＩＩ行列とサブＤＣＴ−ＩＶ行列との直和（direct sum）を含んでいる積に因数分解可能であることを示す以下の式（３）に基づく。
【数４】
0005529257.tif 000005
【００７１】
上式で、ＰNは、以下の並べ替えを生成する置換行列である。
【数５】
0005529257.tif 000006
【００７２】
特に、ＩN/2およびＪN/2は、相応してＮ／２×Ｎ／２恒等行列および順序逆転行列を示す。
【００７３】
実行すべき偶数サイズのＤＣＴ−ＩＩの分割は、式（３）に従って進み、分割から生じたサブＤＣＴ−ＩＩは上記の式（１）によって表され得、分割から生じたサブＤＣＴ−ＩＶは上記の式（２）によって表され得る。次に、等しいサブＤＣＴ−ＩＩＩでのサブＤＣＴ−ＩＶの置換が実行され得、置換は、これらの様々なタイプのＤＣＴの特定の性質に基づく。タイプＩＩＩの第１のＤＣＴについて考えると、これらのＤＣＴ−ＩＩＩは、ＤＣＴ−ＩＩの逆元（または転置）であるという性質を有し、これは以下の式（４）によって数学的に示される。
【数６】
0005529257.tif 000007
【００７４】
次に、タイプＩＶのＤＣＴについて考えると、ＤＣＴ−ＩＶは、インボリュート（または自己逆元／自己転置）であるという性質を有し、これは以下の式（５）によって数学的に示される。
【数７】
0005529257.tif 000008
【００７５】
その上、ＤＣＴ−ＩＶは、以下の式（６）によって示される簡約を使用してＤＣＴ−ＩＩに簡約化され得る。
【数８】
0005529257.tif 000009
【００７６】
式（６）のＲNは、以下の式（７）によって表される再帰的減算の行列であり、
【数９】
0005529257.tif 000010
【００７７】
ＤNは、以下の式（８）によって表されるファクタの対角行列である。
【数１０】
0005529257.tif 000011
【００７８】
式（６）に従ってサブＤＣＴ−ＩＶを実装することにより、式（８）に示されているファクタがサブＤＣＴ−ＩＶへの入力に適用され、これにより因数分解が不可能になる。
【００７９】
サブＤＣＴ−ＩＶを因数分解することの問題を克服し、それによって実装複雑さを低減するために、式（６）のＤＣＴ−ＩＩ
【数１１】
0005529257.tif 000012
【００８０】
は、式（４）によって表されるＤＣＴ−ＩＩＩの性質を使用してＤＣＴ−ＩＩＩで置換され得る。この置換は、以下の式（９）によって数学的に表され得る。
【数１２】
0005529257.tif 000013
【００８１】
式（９）において、ＤNとＲNとの順序は、ＤＣＴ−ＩＩＩでＤＣＴ−ＩＩを置換することによって、式（６）中のこれらの同じマトリックスの順序に関して交換または逆転されている。この逆転により、式（８）のファクタは、現在、ＤＣＴ−ＩＩＩの出力に適用され、これにより、以下の図８に関して示すように、ＤＣＴ−ＩＶの実装の因数分解が可能になる。
【００８２】
図６は、ダイアディックサイズＤＣＴ−ＩＩと非ダイアディックサイズＤＣＴ−ＩＩの両方の効率的な実装についての、実装複雑さに対するコーディング利得のグラフ１１０を示す図である。ダイアディックサイズＤＣＴ−ＩＩと非ダイアディックサイズＤＣＴ−ＩＩの両方の効率的な実装は、本開示で示す再帰的アルゴリズムを使用して導出される。グラフ１１０のｙ軸は、コーディング利得をデシベル（ｄＢ）で示す。グラフ１１０のｘ軸は、ポイントごとの演算に関する実装複雑さを示し、ポイントは、対応するダイアディックサイズまたは非ダイアディックサイズのデータサンプルを示す。
【００８３】
コーディング利得は、以下の数式（９．５）に関して定義され得る。
【数１３】
0005529257.tif 000014
【００８４】
上式で、
【数１４】
0005529257.tif 000015
【００８５】
は、ｉ番目の変換係数（すなわち、行列中のｉ番目の対角要素）の分散を示し、｜｜ｆi｜｜2は、変換行列のｉ番目の基底関数のＬ２ノルムを示す（Ｌ２ノルムは、正規直交基底を用いた変換の場合、１になる）。本質的に、このコーディング利得メトリックは、十分に高いレートの下での変換コーディングによる平均２乗誤差（ＭＳＥ）の低減になるであろうものを与える。
【００８６】
いずれの場合も、コーディング利得および実装複雑さは、様々な理由、たとえば、入力データタイプおよび／または乗算の実装のために変動し得るので、コーディング利得および複雑さは様々な仮定の下で計算される。第１に、複雑さ計算は、加算と減算とシフト演算とが、実装複雑さに関してそれぞれ等しいと仮定する。第２に、ただし、各乗算は、複雑さ計算によって、等しく複雑な加算、減算およびシフト演算の３倍の演算を含むと仮定される。コーディング利得計算に関して、入力は、０．９５に等しい相関係数ρ（ロー）をもつ定常マルコフ１過程（stationary Markov-1 process）であると仮定される。
【００８７】
数学的に、複雑さ計算は以下の式に従って導出され得る。以下の式（１０）は、因数分解後のサイズＮのスケーリングされたＤＣＴ−ＩＩ変換を示す。
【数１５】
0005529257.tif 000016
【００８８】
上式で、
【数１６】
0005529257.tif 000017
【００８９】
は、係数の並べ替えを定義する行列を示し、ΔNは、スケールファクタの対角行列を示し、
【数１７】
0005529257.tif 000018
【００９０】
は、残りのスケーリングされた変換の行列を示す。これらの表記法について考えると、式（１０）の
【数１８】
0005529257.tif 000019
【００９１】
は、式（３）において
【数１９】
0005529257.tif 000020
【００９２】
と置き換えられて、以下の式（１１）を生じ得る。
【数２０】
0005529257.tif 000021
【００９３】
すると、アルゴリズムは、以下の式（１２）および式（１３）に従って表され得る。
【数２１】
0005529257.tif 000022
【００９４】
以下の式（１４）および式（１５）は、ＮサイズのＤＣＴ−ＩＩの完全実装とスケーリングされた実装との概略的な複雑さ推定値を表す。
【数２２】
0005529257.tif 000023
【００９５】
上式で、「ｍ」は、実装における乗算の数を示し、「ａ」は、実装における加算の数を示し、「ｓ」は、実装におけるシフトの数を示す。「α」および「δ」変数は、上記の仮定の下では３に等しい乗算演算の複雑さの大きさを増加または減少させるための制御可能なファクタである。「β」および「ε」は、上記の仮定の下では１に等しい加算演算の複雑さの大きさを増加または減少させるための制御可能なファクタである。「γ」および「ζ」は、上記の仮定の下では１に等しいシフト演算の複雑さの大きさを増加または減少させるための制御可能なファクタである。これらの式から、式（１３）から判断されたアルゴリズム出力を仮定すれば、式（１４）および式（１５）から複雑さ計算が導出され、この複雑さ計算は以下の式（１６）によって表される。
【数２３】
0005529257.tif 000024
【００９６】
図６に示すように、グラフ１１０は、それぞれが、いくつかの例では異なるタイプのシェーディングをもつ様々な形状として示されているポイントのセットを含む。ダイアディックサイズＤＣＴ−ＩＩの場合、サイズ２（または２×２もしくは２ポイント）のＤＣＴ−ＩＩは塗りつぶしなしの正方形によって表され、サイズ４（または４×４もしくは４ポイント）のＤＣＴ−ＩＩは塗りつぶしなしの三角形によって表され、サイズ８のＤＣＴ−ＩＩは塗りつぶしなしの円によって表される。非ダイアディックサイズＤＣＴ−ＩＩの場合、サイズ３（または３×３もしくは３ポイント）のＤＣＴ−ＩＩは塗りつぶされた円によって表され、サイズ６（または６×６もしくは６ポイント）のＤＣＴ−ＩＩは「Ｘ」によって表され、サイズ１２（または１２×１２もしくは１２ポイント）のＤＣＴ−ＩＩは「Ｘ」で埋められた正方形によって表される。
【００９７】
上記の仮定の下で、上記のキーが与えられれば、グラフ１１０は、ダイアディックのサイズ２のＤＣＴ−ＩＩの実装が、最も低いコーディング利得と最も低い実装複雑さとを与えることを示す。非ダイアディックのサイズ３のＤＣＴ−ＩＩを実行することは、同様のサイズのサイズ２のＤＣＴ−ＩＩよりもほぼ２ｄＢ高いコーディング利得を与え、サイズ２（または２×２）のＤＣＴ−ＩＩの実装と比較して、複雑さの増加が極最小である。ダイアディックのサイズ４（または４×４）のＤＣＴ−ＩＩの実装は、同様のサイズのサイズ３のＤＣＴ−ＩＩ実行することよりも約１ｄＢ未満高いコーディング利得を与え、（サイズ２の実装からサイズ３の実装への複雑さの増加と比較して）複雑さの増加が大きい。
【００９８】
本開示の技法によって定義された実装を用いて非ダイアディックのサイズ６のＤＣＴ−ＩＩを実行することは、同様のサイズのサイズ４のＤＣＴ−ＩＩよりも約１ｄＢ高いコーディング利得を与え、（同じく、サイズ３の実装からサイズ４の実装への複雑さの増加と比較して）複雑さの増加が小さい。ダイアディックのサイズ８のＤＣＴ−ＩＩの実装は、本開示の技法によって定義された実装を用いて、同様のサイズのサイズ６のＤＣＴ−ＩＩを実行することよりも約１／２ｄＢ高いコーディング利得を与えるが、（サイズ４からサイズ６への増加と比較して）複雑さの増加が大きいという欠点がある。本開示の技法に従って定義された実装を用いて非ダイアディックのサイズ１２のＤＣＴ−ＩＩを実行することは、同様のサイズのサイズ８のＤＣＴ−ＩＩよりも約１／３高いコーディング利得を与え、実装複雑さの増加が極小さい。
【００９９】
この点において、本開示の技法に従って定義された実装を用いて非ダイアディックサイズＤＣＴ−ＩＩを実行することは、コーディング利得と実装複雑さとの比の観点から、また本開示の技法に従って実行され得る、同様のサイズのダイアディックサイズＤＣＴ−ＩＩよりも効率的であり得る。上記で詳細には示していないが、スケーリングされた実装は、本開示で説明する理由のために、スケーリングされていない実装よりも概して効率的であるので、ダイアディックおよび非ダイアディックサイズＤＣＴ−ＩＩの各々を、スケーリングされていない実装または完全実装ではなく、スケーリングされた実装によって実行した。一般に、スケーリングされていないダイアディックＤＣＴ−ＩＩよりも良好なコーディング利得と複雑さとの比を与えるスケーリングされた実装に関して説明したが、スケーリングされていない非ダイアディックＤＣＴ−ＩＩに対して同じ利益が生じ得る。この点において、アルゴリズムの因数分解態様は、除去され得るが、スケーリングされていないダイアディックＤＣＴ−ＩＩと比較したとき、非ダイアディックＤＣＴ−ＩＩのより効率的なスケーリングされていない実装または完全実装を依然として生じ得る。
【０１００】
図７は、本開示で説明する技法に従って実装された、図２の例に示されている非ダイアディックサイズＤＣＴ−ＩＩユニット５２などのスケーリングされた非ダイアディックサイズＤＣＴ−ＩＩユニットによって実行される例示的な再帰的反復を示すフローチャートである。この場合も、再帰的アルゴリズムまたはプロセスは、本開示で説明するアルゴリズムをプロセッサに実行させるコンピュータ可読記憶媒体に記憶された、コンピュータプログラムなど、複数の命令として実装され得る。代替的に、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、または他のタイプの同様のハードウェアなど、専用ハードウェアは、図４の例に関して説明する再帰的反復を使用して所与の非ダイアディックまたは偶数サイズのＤＣＴ−ＩＩを実行するように本開示の技法を実装し得る。本技法は、再帰的アルゴリズムの特定の実装に限定されるべきではない。
【０１０１】
図７の例は、図４、図５Ａ〜図５Ｂの例に関して前に説明した技法の適応を表す。図７の例に示す適応は、完全サブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとを計算するのではなく、スケーリングされたサブＤＣＴ−ＩＩと完全またはスケーリングされていないサブＤＣＴ−ＩＩＩとを計算することによってスケーリングされたＤＣＴ−ＩＩ実装を生成する、異なるアルゴリズムを含む。この適応されたアルゴリズムは、図５Ｂの例示的な実装形態に関して示したファクタ１０６を含まない、ＤＣＴ−ＩＩのスケーリングされた実装を生じる。
【０１０２】
初めに、ＤＣＴ−ＩＩユニット５２は、実行すべき非ダイアディックＤＣＴ−ＩＩのサイズを判断する（１２０）。通常、ＤＣＴ−ＩＩユニット５２は、ＤＣＴ−ＩＩユニット５２が受信した残差データのブロックのサイズに基づいてこの判断を行う。残差データブロックのサイズが２の倍数であると判断された場合（「ＹＥＳ」１２２）、ＤＣＴ−ＩＩユニット５２は、ＤＣＴ−ＩＩユニット５２への入力値の相互加算と相互減算とを含むバタフライを計算し（１２４）、入力値は、ビデオエンコーダの例では残差ブロック値を含み得る。バタフライは、概して、偶数入力と呼ばれることがある入力の第１のサブセットを相互減算および／または相互加算する偶数部分と、奇数入力と呼ばれることがある入力の第２のサブセットを相互減算および／または相互加算する奇数部分とを含む。ＤＣＴ−ＩＩユニット５２は、次いで、以下の図８の例に示すように、非ダイアディックサイズＤＣＴ−ＩＩの奇数部分についての奇数入力の順序を逆転させる（１２６）。ＤＣＴ−ＩＩユニット５２は、また本開示の再帰的技法に従って、同じく図９の例に関して以下で示される、実装の奇数部分についての一連の再帰的減算を計算する（１２８）。ＤＣＴ−ＩＩユニット５２は、次いで、再帰的減算の結果を入力として使用して、実行すべきＤＣＴ−ＩＩのサイズの１／２のサイズのサブＤＣＴ−ＩＩＩを直接計算する（１３０）。
【０１０３】
一方、奇数部分の順序を逆転させること、再帰的減算を計算すること、およびサブＤＣＴ−ＩＩＩを計算することの前、後、またはそれらと同時に、ＤＣＴ−ＩＩユニット５２は、バタフライ出力の偶数部分について、実行すべきＤＣＴ−ＩＩの判断されたサイズの１／２のサイズのスケーリングされたサブＤＣＴ−ＩＩを計算する（１３２）。バタフライ出力の偶数部分についてこのサブＤＣＴ−ＩＩを計算するために、ＤＣＴ−ＩＩユニット５２は、概して、別の再帰的反復を実行し、それにより、実行すべきＤＣＴ−ＩＩの判断されたサイズの１／２のサイズのサブＤＣＴ−ＩＩは、上記で説明したステップ１２０〜１３２を受ける。この再帰的反復は、スケーリングされたサブＤＣＴ−ＩＩのうちの１つが奇数サイズになるまで繰り返し、その後、ＤＣＴ−ＩＩユニット５２は、このスケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数でないことを判断し（「ＮＯ」１２２）、奇数サイズのサブＤＣＴ−ＩＩを直接計算する（１３４）。本明細書で使用する「直接計算する」という用語は、この場合も、特定のサイズのＤＣＴ−ＩＩまたはＤＣＴ−ＩＩＩを判断するために使用される行列係数を記憶するライブラリまたはデータストアにアクセスするプロセスを指す。ＤＣＴ−ＩＩユニット５２は、サブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとを計算した後に、偶数部分（サブＤＣＴ−ＩＩ）からの結果と奇数部分（サブＤＣＴ−ＩＩＩ）からの結果とを合成する（１３３）。
【０１０４】
いずれの場合も、偶数サイズまたは奇数サイズのスケーリングされたサブＤＣＴ−ＩＩを計算した後、あるいはサブＤＣＴ−ＩＩＩを計算した後に、再帰的反復は、結果をＤＣＴ係数として出力することによって終了する（１３６）。単一の再帰的反復から戻ることは前の再帰的反復に戻ることになり得ると考えると、出力結果は記憶され得、その後、その再帰的反復が完了すると、より多くの結果が出力され、結果のすべてがＤＣＴ係数として出力されるまで、以下同様である。この点において、本技法は、特に、従来のダイアディックサイズのＤＣＴ−ＩＩと比較して、スケーリングされた非ダイアディックサイズのＤＣＴ−ＩＩについて考えるとき、任意のサイズの入力データブロックに対してＤＣＴ−ＩＩを実行することが可能であるスケーリングされたＤＣＴ−ＩＩ実装を提供するとともに、実装複雑さの減少とコーディング効率の増加とをも促進し得る。
【０１０５】
図８は、サイズｎの偶数サイズのスケーリングされたＤＣＴ−ＩＩ１６０を実行するための、本開示で説明する再帰的技法の反復を示すブロック図である。ＤＣＴ−ＩＩＩ１６０は、サブＤＣＴ−ＩＩ９４がスケーリングされたサブＤＣＴ−ＩＩ１６２と置き換えられ、ファクタ１０４が除去されていることを除いて、図５Ｂの例に示した非ダイアディックサイズＤＣＴ−ＩＩ実装９０と同様である。すなわち、順序逆転ユニット１０２と、再帰的減算１０６と、サブＤＣＴ−ＩＩＩ実装１０８とを含むスケーリングされたＤＣＴ−ＩＩ実装１６０の奇数部分は、図５Ａの例に示した偶数サイズＤＣＴ−ＩＩ９０などの偶数サイズＤＣＴ−ＩＩから直接計算され得る。この計算は、奇数部分がこれらのファクタを含まないような方式で奇数部分を直接計算することによって、ファクタの除去を本質的に含み得る。この意味で、ファクタ１０４は、上記の式中で言及したサブＤＣＴ−ＩＶの実装から除去されている。上記で説明したように、量子化ファクタは、ファクタ１０４を考慮するために更新済みであり得る。これにより、ビデオエンコーダ２０およびビデオデコーダ２６など、ビデオエンコーダおよびデコーダの全体的な実装複雑さが低減する。
【０１０６】
非ダイアディックサイズＤＣＴに関して本開示で説明したが、本技法は、ダイアディックサイズＤＣＴの、最適でないとしても効率的な実装を判断するために、これらのダイアディックサイズＤＣＴに適用し得る。しかしながら、以下の図６に示すように、非ダイアディックサイズＤＣＴは、ダイアディックサイズＤＣＴよりも良好な、コーディング効率と実装複雑さとの比を与え得、実装複雑さを過度に増加させることなしにコーディングを改善し得る。
【０１０７】
本開示の技法は、モバイルフォンなどのワイヤレス通信デバイスハンドセット、集積回路（ＩＣ）またはＩＣのセット（すなわち、チップセット）を含む、多種多様なデバイスまたは装置において実装され得る。機能的態様を強調するために与えられた任意の構成要素、モジュールまたはユニットについて説明したが、異なるハードウェアユニットによる実現を必ずしも必要とするわけではない。本明細書で説明した技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せでも実装され得る。モジュール、ユニット、または構成要素として説明した特徴は、集積論理デバイスに一緒に、または個別であるが相互運用可能な論理デバイスとして別々に実装され得る。場合によっては、様々な特徴は、集積回路チップまたはチップセットなどの集積回路デバイスとして実装され得る。
【０１０８】
ソフトウェアで実装する場合、これらの技法は、プロセッサで実行されると、上記で説明した方法の１つまたは複数を実行する命令を備えるコンピュータ可読媒体によって少なくとも部分的に実現され得る。コンピュータ可読媒体は、物理的構造物であるコンピュータ可読記憶媒体を備え得、パッケージング材料を含むことがあるコンピュータプログラム製品の一部をなし得る。この意味で、コンピュータ可読媒体は非一時的であり得る。コンピュータ可読記憶媒体は、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気または光学データ記憶媒体などを備え得る。
【０１０９】
コードまたは命令は、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）などの１つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルロジックアレイ（ＦＰＧＡ）、または他の等価の集積回路またはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のソフトウェアモジュールまたはハードウェアモジュール内に提供され得、または複合ビデオコーデックに組み込まれ得る。また、本技法は、１つまたは複数の回路または論理要素中に十分に実装され得る。
【０１１０】
本開示はまた、本開示で説明した技法の１つまたは複数を実装する回路を含む様々な集積回路デバイスのいずれかを企図する。そのような回路は、単一の集積回路チップ、またはいわゆるチップセット中の複数の相互運用可能な集積回路チップで提供され得る。そのような集積回路デバイスは様々な適用例において使用され得、適用例のいくつかは携帯電話ハンドセットなどのワイヤレス通信デバイスでの使用を含み得る。
【０１１１】
本開示の様々な技法について説明した。これらおよび他の態様は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
タイプＩＩのスケーリングされた離散コサイン変換（ＤＣＴ−ＩＩ）を実行する方法であって、前記方法が、
装置を用いて、実行すべき前記スケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記装置を用いて、前記スケーリングされたＤＣＴ−ＩＩを実行することと
を備え、
前記スケーリングされたＤＣＴ−ＩＩを実行することが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を含む、方法。
［Ｃ２］
前記バタフライを計算することと、前記順序を逆転させることと、前記一連の再帰的減算を計算することと、前記スケーリングされたサブＤＣＴ−ＩＩを計算することと、前記完全ＤＣＴ−ＩＩを計算することとは、前記再帰によって生成された追加のサブＤＣＴ−ＩＩのサイズが２の倍数でなくなるまで前記サブＤＣＴ−ＩＩに関して再帰的に行われる、Ｃ１に記載の方法。
［Ｃ３］
前記スケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
前記スケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数であるという前記判断に応答して、前記スケーリングされたサブＤＣＴ−ＩＩを実行することと
をさらに備え、
前記スケーリングされたサブＤＣＴ−ＩＩを実行することが、
前記スケーリングされたサブＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含む別のバタフライを計算することであって、前記別のバタフライが、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の第１のサブセットを発生する第１の部分と、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の第２のサブセットを発生する第２の部分とを含む、別のバタフライを計算することと、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の逆順の第２のサブセットを発生するために、前記スケーリングされたサブＤＣＴ−ＩＩへの相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の再帰的に減算された第２のサブセットを発生するために、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記第１のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、追加のスケーリングされたサブＤＣＴ−ＩＩを計算することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、追加の完全サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれの追加のスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を含む、Ｃ１に記載の方法。
［Ｃ４］
量子化行列の実装複雑さを増加させることなしに前記スケーリングされたＤＣＴ−ＩＩを計算するときに本質的に除去されるファクタを考慮する、前記量子化行列の量子化係数を構成することをさらに備える、Ｃ１に記載の方法。
［Ｃ５］
前記スケーリングされたサブＤＣＴ−ＩＩを計算することが、前記スケーリングされたＤＣＴ−ＩＩユニットの実装複雑さを低減するようにファクタを本質的に除去する方式で、前記スケーリングされたサブＤＣＴ−ＩＩを計算することを備える、Ｃ１に記載の方法。
［Ｃ６］
前記装置がビデオコーダを備え、
実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断することが、
残差ビデオデータのブロックを受信することと、
残差ビデオデータの前記ブロックの前記サイズが２の倍数であるかどうかを判断することと、
残差ビデオデータの前記ブロックの前記サイズに基づいて、実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断することと
を備え、
前記スケーリングされた出力値がＤＣＴ係数を備え、
前記方法が、前記ビデオコーダの実装複雑さを増加させることなしに実行すべき前記スケーリングされたＤＣＴ−ＩＩを計算するときに本質的に除去されるファクタを考慮する量子化係数に従って前記ＤＣＴ係数を量子化するために、前記ビデオコーダの量子化ユニットを用いて量子化を実行することをさらに備える、Ｃ１に記載の方法。
［Ｃ７］
前記装置が、ビデオエンコーダ、ビデオデコーダ、オーディオエンコーダ、オーディオデコーダ、画像エンコーダおよび画像デコーダのうちの１つまたは複数を備える、Ｃ１に記載の方法。
［Ｃ８］
実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数でないと判断したことに応答して、バタフライを計算することなしに追加の出力を発生するために前記スケーリングされたＤＣＴ−ＩＩを直接計算することと、相互減算された入力の前記第２のサブセットの前記順序を逆転させることと、前記一連の再帰的減算を計算することと、前記スケーリングされたサブＤＣＴ−ＩＩを計算することと、前記完全サブＤＣＴ−ＩＩＩを計算することと、出力の前記第１および第２のセットを並べ替えることとをさらに備える、Ｃ１に記載の方法。
［Ｃ９］
実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断し、実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記スケーリングされたＤＣＴ−ＩＩを実行する、スケーリングされたＤＣＴ−ＩＩユニット
を備え、
前記スケーリングされたＤＣＴ−ＩＩユニットが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、前記バタフライユニットが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライユニットと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させる順序逆転ユニットと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算する再帰的減算ユニットと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算する、スケーリングされたサブＤＣＴ−ＩＩユニットと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算する完全サブＤＣＴ−ＩＩＩユニットと
を含み、
前記スケーリングされたＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替える、メディアコーディングデバイス。
［Ｃ１０］
前記スケーリングされたＤＣＴ−ＩＩユニットは、前記再帰によって生成された追加のサブＤＣＴ−ＩＩのサイズが２の倍数でなくなるまで、前記サブＤＣＴ−ＩＩに関して、前記バタフライを計算し、前記順序を逆転させ、前記一連の再帰的減算を計算し、前記スケーリングされたサブＤＣＴ−ＩＩを計算し、前記完全ＤＣＴ−ＩＩを再帰的に計算する、Ｃ９に記載のメディアコーディングデバイス。
［Ｃ１１］
前記スケーリングされたサブＤＣＴ−ＩＩユニットが、前記スケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断し、前記スケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数であると判断したことに応答して、前記スケーリングされたサブＤＣＴ−ＩＩを実行し、
前記スケーリングされたサブＤＣＴ−ＩＩユニットが、
前記スケーリングされたサブＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含む別のバタフライを計算する追加のバタフライユニットであって、前記別のバタフライが、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の第１のサブセットを発生する第１の部分と、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の第２のサブセットを発生する第２の部分とを含む、追加のバタフライユニットと、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の逆順の第２のサブセットを発生するために、前記スケーリングされたサブＤＣＴ−ＩＩへの相互減算された入力の前記第２のサブセットの順序を逆転させる、追加の順序逆転ユニットと、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の再帰的に減算された第２のサブセットを発生するために、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算する、追加の再帰的減算ユニットと、
前記サブＤＣＴ−ＩＩへの前記入力の前記第１のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、追加のスケーリングされたサブＤＣＴ−ＩＩを計算する、追加のスケーリングされたサブＤＣＴ−ＩＩユニットと、
前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、追加の完全サブＤＣＴ−ＩＩＩを計算する、追加の完全サブＤＣＴ−ＩＩユニットと
を含み、
前記サブＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれの追加のスケーリングされたサブＤＣＴ−ＩＩユニットと完全サブＤＣＴ−ＩＩＩユニットとによって生成された出力の第１および第２のセットを並べ替える、Ｃ９に記載のメディアコーディングデバイス。
［Ｃ１２］
量子化行列の実装複雑さを増加させることなしに前記スケーリングされたＤＣＴ−ＩＩを計算するときに本質的に除去されるファクタを考慮する、前記量子化行列を含む量子化ユニットをさらに備える、Ｃ９に記載のメディアコーディングデバイス。
［Ｃ１３］
前記スケーリングされたサブＤＣＴ−ＩＩユニットが、前記スケーリングされたＤＣＴ−ＩＩユニットの実装複雑さを低減するようにファクタを本質的に除去する方式で、前記スケーリングされたサブＤＣＴ−ＩＩを計算する、Ｃ９に記載のメディアコーディングデバイス。
［Ｃ１４］
前記メディアコーディングデバイスがビデオコーダを備え、
前記スケーリングされたＤＣＴ−ＩＩユニットが、残差ビデオデータのブロックを受信し、残差ビデオデータの前記ブロックのサイズが２の倍数であるかどうかを判断し、残差ビデオデータの前記ブロックの前記サイズに基づいて、実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断し、
前記スケーリングされた出力値がＤＣＴ係数を備え、
前記メディアコーディングデバイスが、前記ビデオコーダの実装複雑さを増加させることなしに実行すべき前記スケーリングされたＤＣＴ−ＩＩを計算するときに本質的に除去されるファクタを考慮する量子化係数に従って前記ＤＣＴ係数を量子化する量子化ユニットをさらに備える、Ｃ９に記載のメディアコーディングデバイス。
［Ｃ１５］
前記メディアコーディングデバイスが、ビデオエンコーダ、ビデオデコーダ、オーディオエンコーダ、オーディオデコーダ、画像エンコーダおよび画像デコーダのうちの１つまたは複数を備える、Ｃ９に記載のメディアコーディングデバイス。
［Ｃ１６］
前記スケーリングされたＤＣＴ−ＩＩユニットが、実行すべき前記スケーリングされたＤＣＴ−ＩＩのサイズが２の倍数でないと判断したことに応答して、バタフライを計算することなしに追加の出力を発生するために前記スケーリングされたＤＣＴ−ＩＩを直接計算し、相互減算された入力の前記第２のサブセットの順序を逆転させ、前記一連の再帰的減算を計算し、前記スケーリングされたサブＤＣＴ−ＩＩを計算し、前記完全サブＤＣＴ−ＩＩＩを計算し、出力の前記第１および第２のセットを並べ替える、Ｃ９に記載のメディアコーディングデバイス。
［Ｃ１７］
プロセッサに、
実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記スケーリングされたＤＣＴ−ＩＩを実行することと
を行わせるための命令を備える非一時的コンピュータ可読媒体であって、
前記プロセッサに前記スケーリングされたＤＣＴ−ＩＩを実行させる前記命令が、前記プロセッサに、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記入力の第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を行わせる命令を含む、非一時的コンピュータ可読媒体。
［Ｃ１８］
前記命令が、前記プロセッサに、再帰的な方式で生成された追加のサブＤＣＴ−ＩＩのサイズが２の倍数でなくなるまで、前記サブＤＣＴ−ＩＩに関して、前記バタフライを計算することと、前記順序を逆転させることと、前記一連の再帰的減算を計算することと、前記スケーリングされたサブＤＣＴ−ＩＩを計算することと、前記完全ＤＣＴ−ＩＩを前記再帰的な方式で計算することとを行わせる、Ｃ１７に記載の非一時的コンピュータ可読媒体。
［Ｃ１９］
前記命令が、前記プロセッサに、
前記スケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
前記スケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数であるという前記判断に応答して、前記スケーリングされたサブＤＣＴ−ＩＩを実行することと
を行わせ、
前記プロセッサに前記スケーリングされたサブＤＣＴ−ＩＩを実行させる前記命令が、前記プロセッサに、
前記スケーリングされたサブＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含む別のバタフライを計算することであって、前記別のバタフライが、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の第１のサブセットを発生する第１の部分と、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の第２のサブセットを発生する第２の部分とを含む、別のバタフライを計算することと、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の逆順の第２のサブセットを発生するために、前記スケーリングされたサブＤＣＴ−ＩＩへの相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の再帰的に減算された第２のサブセットを発生するために、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の前記第１のサブセットを受信し、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、追加のスケーリングされたサブＤＣＴ−ＩＩを計算することと、
前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、追加の完全サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれの追加のスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を行わせる命令を含む、Ｃ１７に記載の非一時的コンピュータ可読媒体。
［Ｃ２０］
前記命令がさらに、前記プロセッサに、前記スケーリングされたＤＣＴ−ＩＩユニットの実装複雑さを低減するようにファクタを本質的に除去する方式で、前記スケーリングされたサブＤＣＴ−ＩＩを計算させる、Ｃ１７に記載の非一時的コンピュータ可読媒体。
［Ｃ２１］
前記命令がさらに、前記プロセッサに、
残差ビデオデータのブロックを受信することと、
残差ビデオデータの前記ブロックの前記サイズが２の倍数であるかどうかを判断することと、
残差ビデオデータの前記ブロックの前記サイズに基づいて、実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断することと
を行わせ、
前記スケーリングされた出力値がＤＣＴ係数を備え、
前記命令がさらに、前記プロセッサに、前記ビデオコーダの実装複雑さを増加させることなしに実行すべき前記スケーリングされたＤＣＴ−ＩＩを計算するときに本質的に除去されるファクタを考慮する量子化係数に従って前記ＤＣＴ係数を量子化させる、Ｃ１７に記載の非一時的コンピュータ可読媒体。
［Ｃ２２］
前記命令がさらに、前記プロセッサに、実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数でないと判断したことに応答して、バタフライを計算することなしに追加の出力を発生するために前記スケーリングされたＤＣＴ−ＩＩを直接計算することと、相互減算された入力の前記第２のサブセットの前記順序を逆転させることと、前記一連の再帰的減算を計算することと、前記スケーリングされたサブＤＣＴ−ＩＩを計算することと、前記完全サブＤＣＴ−ＩＩＩを計算することと、出力の前記第１および第２のセットを並べ替えることとを行わせる、Ｃ１７に記載の非一時的コンピュータ可読媒体。
［Ｃ２３］
実行すべきスケーリングされたＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断するための手段と、
実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記スケーリングされたＤＣＴ−ＩＩを実行するための手段と
を備える装置であって、
前記スケーリングされたＤＣＴ−ＩＩを実行するための前記手段が、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するための手段であって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算するための手段と、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させるための手段と、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算するための手段と、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、スケーリングされたサブＤＣＴ−ＩＩを計算するための手段と、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算するための手段と、
前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれのスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えるための手段と
を含む、装置。
［Ｃ２４］
前記スケーリングされたＤＣＴ−ＩＩを実行するための前記手段が、前記再帰によって生成された追加のサブＤＣＴ−ＩＩのサイズが２の倍数でなくなるまで前記サブＤＣＴ−ＩＩに関してスケーリングされたＤＣＴ−ＩＩを再帰的に実行する、Ｃ２３に記載の装置。
［Ｃ２５］
前記スケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断するための手段と、
前記スケーリングされたサブＤＣＴ−ＩＩのサイズが２の倍数であるという前記判断に応答して、前記スケーリングされたサブＤＣＴ−ＩＩを実行するための手段と
をさらに備え、
前記スケーリングされたサブＤＣＴ−ＩＩを実行するための前記手段が、
前記スケーリングされたサブＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含む別のバタフライを計算するための手段であって、前記別のバタフライが、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の第１のサブセットを発生する第１の部分と、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の第２のサブセットを発生する第２の部分とを含む、別のバタフライを計算するための手段と、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の逆順の第２のサブセットを発生するために、前記スケーリングされたサブＤＣＴ−ＩＩへの相互減算された入力の前記第２のサブセットの順序を逆転させるための手段と、
前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の再帰的に減算された第２のサブセットを発生するために、前記スケーリングされたサブＤＣＴ−ＩＩへの前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算するための手段と、
前記サブＤＣＴ−ＩＩへの前記入力の前記第１のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、追加のスケーリングされたサブＤＣＴ−ＩＩを計算するための手段と、
前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットを受信し、前記サブＤＣＴ−ＩＩへの前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、追加の完全サブＤＣＴ−ＩＩＩを計算するための手段と、
前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれの追加のスケーリングされたサブＤＣＴ−ＩＩと完全サブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えるための手段と
を含む、Ｃ２３に記載の装置。
［Ｃ２６］
量子化行列の実装複雑さを増加させることなしに前記スケーリングされたＤＣＴ−ＩＩを計算するときに本質的に除去されるファクタを考慮する、前記量子化行列の量子化係数を構成するための手段をさらに備える、Ｃ２３に記載の装置。
［Ｃ２７］
前記スケーリングされたサブＤＣＴ−ＩＩを計算するための前記手段が、前記スケーリングされたＤＣＴ−ＩＩユニットの実装複雑さを低減するようにファクタを本質的に除去する方式で、前記スケーリングされたサブＤＣＴ−ＩＩを計算するための手段を備える、Ｃ２３に記載の装置。
［Ｃ２８］
前記装置がビデオコーダを備え、
実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断するための前記手段が、
残差ビデオデータのブロックを受信するための手段と、
残差ビデオデータの前記ブロックの前記サイズが２の倍数であるかどうかを判断するための手段と、
残差ビデオデータの前記ブロックの前記サイズに基づいて、実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であるかどうかを判断するための手段と
を備え、
前記スケーリングされた出力値がＤＣＴ係数を備え、
前記装置が、前記ビデオコーダの実装複雑さを増加させることなしに実行すべき前記スケーリングされたＤＣＴ−ＩＩを計算するときに本質的に除去されるファクタを考慮する量子化係数に従って前記ＤＣＴ係数を量子化するための手段を備える、Ｃ２３に記載の装置。
［Ｃ２９］
前記装置が、ビデオエンコーダ、ビデオデコーダ、オーディオエンコーダ、オーディオデコーダ、画像エンコーダおよび画像デコーダのうちの１つまたは複数を備える、Ｃ２３に記載の装置。
［Ｃ３０］
実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数でないと判断したことに応答して、バタフライを計算することなしに追加の出力を発生するために前記スケーリングされたＤＣＴ−ＩＩを直接計算し、相互減算された入力の前記第２のサブセットの前記順序を逆転させ、前記一連の再帰的減算を計算し、前記スケーリングされたサブＤＣＴ−ＩＩを計算し、前記完全サブＤＣＴ−ＩＩＩを計算し、出力の前記第１および第２のセットを並べ替えるための手段をさらに備える、Ｃ２３に記載の装置。
［Ｃ３１］
タイプＩＩの完全離散コサイン変換（ＤＣＴ−ＩＩ）を実行する方法であって、前記方法が、
装置を用いて、実行すべき前記完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記完全ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記装置を用いて、前記完全ＤＣＴ−ＩＩを実行することと
を備え、
前記完全ＤＣＴ−ＩＩを実行することが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、
出力の第１の完全セットを発生するために、出力の前記第１のセットに１つまたは複数のスケールファクタを乗算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、出力の前記第１の完全セットと出力の前記第２のセットとを並べ替えることと
を含む、方法。
［Ｃ３２］
実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断し、実行すべき前記完全ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記完全ＤＣＴ−ＩＩを実行する、完全ＤＣＴ−ＩＩユニット
を備え、
前記完全ＤＣＴ−ＩＩが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、前記バタフライユニットが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライユニットと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させる順序逆転ユニットと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算する再帰的減算ユニットと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算する、完全サブＤＣＴ−ＩＩユニットと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算する完全サブＤＣＴ−ＩＩＩユニットと、
出力の第１の完全セットを発生するために、サブＤＣＴ−ＩＩＩの出力に１つまたは複数のスケールファクタを乗算するスケーリングユニットと
を含み、
前記完全ＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩの出力値を発生するために、出力の前記第１の完全セットと出力の前記第２のセットとを並べ替える、メディアコーディングデバイス。
［Ｃ３３］
プロセッサに、
実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記完全ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記完全ＤＣＴ−ＩＩを実行することと
行わせるための命令を備える非一時的コンピュータ可読媒体であって、
前記プロセッサに前記完全ＤＣＴ−ＩＩを実行させる前記命令が、前記プロセッサに、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算することと、
出力の第１の完全セットを発生するために、出力の前記第１のセットに１つまたは複数のスケールファクタを乗算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、出力の前記第１の完全セットおよび出力の前記第２のセットを並べ替えることと
を行わせる命令を含む、非一時的コンピュータ可読媒体。
［Ｃ３４］
実行すべき完全ＤＣＴ−ＩＩのサイズが２の倍数であるかどうかを判断するための手段と、
実行すべき前記完全ＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記完全ＤＣＴ−ＩＩを実行するための手段と
を備える装置であって、
前記完全ＤＣＴ−ＩＩを実行するための前記手段が、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するための手段であって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算するための手段と、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させるための手段と、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算するための手段と、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、完全サブＤＣＴ−ＩＩを計算するための手段と、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、完全サブＤＣＴ−ＩＩＩを計算するための手段と、
出力の第１の完全セットを発生するために、出力の前記第１のセットに１つまたは複数のスケールファクタを乗算するための手段と、
前記ＤＣＴ−ＩＩの出力値を発生するために、出力の前記第１の完全セットおよび出力の前記第２のセットを並べ替えるための手段と
を含む、装置。
［Ｃ３５］
タイプＩＩＩの離散コサイン変換（ＤＣＴ−ＩＩＩ）を実行する方法であって、前記方法が、
装置を用いて、実行すべき前記ＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記ＤＣＴ−ＩＩＩの前記サイズが２の倍数であると判断したことに応答して、前記装置を用いて、前記ＤＣＴ−ＩＩＩを実行することと
を備え、
前記ＤＣＴ−ＩＩＩを実行することが、タイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行することを含み、
前記ＤＣＴ−ＩＩを実行することが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
を含む、方法。
［Ｃ３６］
実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断し、実行すべき前記ＤＣＴ−ＩＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩＩを実行する、ＤＣＴ−ＩＩＩユニット
を備え、
前記ＤＣＴ−ＩＩＩユニットが、ＤＣＴ−ＩＩユニットによって実行されるタイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行し、
前記ＤＣＴ−ＩＩを実行するために、前記ＤＣＴ−ＩＩユニットが、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算するバタフライユニットであって、前記バタフライユニットが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライユニットと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させる順序逆転ユニットと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算する再帰的減算ユニットと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算する、サブＤＣＴ−ＩＩユニットと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算するサブＤＣＴ−ＩＩＩユニットと
を含み、
前記ＤＣＴ−ＩＩユニットが、前記ＤＣＴ−ＩＩのスケーリングされた出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替える、メディアコーディングデバイス。
［Ｃ３７］
プロセッサに、
実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断することと、
実行すべき前記ＤＣＴ−ＩＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩＩを実行することと
を行わせるための命令を備える非一時的コンピュータ可読媒体であって、
前記命令が、前記プロセッサに、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
によって実行されたタイプＩＩのＤＣＴ（ＤＣＴ−ＩＩ）の逆元を実行することによって、前記ＤＣＴ−ＩＩＩを実行させる、非一時的コンピュータ可読媒体。
［Ｃ３８］
実行すべきＤＣＴ−ＩＩＩのサイズが２の倍数であるかどうかを判断するための手段と、
実行すべき前記スケーリングされたＤＣＴ−ＩＩの前記サイズが２の倍数であると判断したことに応答して、前記ＤＣＴ−ＩＩＩを実行するための手段と
を備える装置であって、
前記ＤＣＴ−ＩＩＩを実行するための前記手段が、
前記ＤＣＴ−ＩＩへの入力の相互加算と相互減算とを含むバタフライを計算することであって、前記バタフライが、前記入力の第１のサブセットを相互加算する第１の部分と、前記入力の第２のサブセットを相互減算する第２の部分とを含む、バタフライを計算することと、
前記入力の逆順の第２のサブセットを発生するために、相互減算された入力の前記第２のサブセットの順序を逆転させることと、
前記入力の再帰的に減算された第２のサブセットを発生するために、前記入力の前記逆順の第２のサブセットをそれぞれ再帰的に減算する一連の再帰的減算を計算することと、
前記入力の前記第１のサブセットを受信し、前記入力の前記第１のサブセットに基づいて出力の第１のセットを発生する、サブＤＣＴ−ＩＩを計算することと、
前記入力の前記再帰的に減算された第２のサブセットを受信し、前記入力の前記再帰的に減算された第２のサブセットに基づいて出力の第２のセットを発生する、サブＤＣＴ−ＩＩＩを計算することと、
前記ＤＣＴ−ＩＩの出力値を発生するために、前記それぞれのサブＤＣＴ−ＩＩとサブＤＣＴ−ＩＩＩとによって生成された出力の前記第１および第２のセットを並べ替えることと
によって実行されたＤＣＴ−ＩＩの逆元を実行するための手段を含む、装置。
【図１】
0005529257.tif 000025
【図２】
0005529257.tif 000026
【図３】
0005529257.tif 000027
【図４】
0005529257.tif 000028
【図５Ａ】
0005529257.tif 000029
【図５Ｂ】
0005529257.tif 000030
【図６】
0005529257.tif 000031
【図７】
0005529257.tif 000032
【図８】
0005529257.tif 000033