(57)【要約】  本開示は、画像フレームの復号処理を加速するために並列プロセッサ技術を利用する、ビデオ復号技法を説明する。本技法は、互いに並列に復号されるべきビデオブロックのバッチを定義することを含む。本開示によれば、方法は、画像フレームのビデオブロックの第１のバッチを定義することと、ビデオブロックの第１のバッチを逐次的に復号することと、ビデオブロックの第１のバッチに関連してビデオブロックの第２のバッチとビデオブロックの第３のバッチとを定義することと、ビデオブロックの第２と第３のバッチを互いに並列に復号することとを備える。  【選択図】      図１
2009540680.tif 000002
【特許請求の範囲】
【請求項１】
画像フレームのビデオブロックの第１のバッチを定義することと、
ビデオブロックの前記第１のバッチを逐次的に復号することと、
ビデオブロックの前記第１のバッチに関連して、ビデオブロックの第２のバッチとビデオブロックの第３のバッチを定義することと、
ビデオブロックの前記第２と第３のバッチを互いに並列に復号することと、
を備える方法。
【請求項２】
前記第２と第３のバッチを復号することは、前記第２と第３のバッチを並列処理で復号することを含む、請求項１に記載の方法。
【請求項３】
前記第２と第３のバッチを並列に復号することは、２つ以上の異なるプロセッサを使用することを含む、請求項２に記載の方法。
【請求項４】
ビデオブロックの前記第２と第３のバッチを並列に復号することは、
マルチスレッドプロセッサの第１のスレッドを使用して、前記第２のバッチを逐次的に復号することと、
前記マルチスレッドプロセッサの第２のスレッドを使用して、前記第３のバッチを逐次的に復号することと、
を含む、請求項２に記載の方法。
【請求項５】
前記第２のバッチの前記復号が終了すると、前記第１のスレッドのための他のバッチを定義することと、
前記第３のバッチの前記復号が終了すると、前記第２のスレッドのための他のバッチを定義することと、
をさらに備える、請求項４に記載の方法。
【請求項６】
前記スレッドのうちの１つが復号を実行するために利用可能になり、隣接するビデオブロックのセットにとって必要な全ての情報が利用可能になると、前記バッチのそれぞれが定義される、請求項５に記載の方法。
【請求項７】
ビデオブロックの前記第１、第２、および第３のバッチに関連して、ビデオブロックの第４、第５、および第６のバッチを定義することと、
ビデオブロックの前記第４、第５、および第６のバッチを並列に復号することと、
をさらに備える、請求項４に記載の方法。
【請求項８】
ビデオブロックの前記第４、第５、および第６のバッチを並列に復号することは、
前記マルチスレッドプロセッサの前記第１のスレッドを使用して前記第４のバッチを逐次的に復号することと、
前記マルチスレッドプロセッサの前記第２のスレッドを使用して前記第５のバッチを逐次的に復号することと、
前記マルチスレッドプロセッサの第３のスレッドを使用して前記第６のバッチを逐次的に復号することと、
を含む、請求項７に記載の方法。
【請求項９】
前記第１のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第２のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第３のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第２のバッチの前記ビデオブロックは、前記第３のバッチの前記ビデオブロックと隣接しない、請求項１に記載の方法。
【請求項１０】
前記バッチを定義することは、前記バッチのパラメータを定義することを備える、請求項１に記載の方法。
【請求項１１】
それぞれの個々のバッチのために、パラメータを定義することは、前記画像フレーム内のコラムを定義することと、前記画像フレーム内の列を定義することと、それぞれのバッチのためにいくつかの隣接するビデオブロックを定義することとを含む、請求項１０に記載の方法。
【請求項１２】
連続するバッチを定義することと、ビデオシーケンスの画像フレームの全ての前記ビデオブロックのための前記連続するバッチを復号することとをさらに備える、請求項１に記載の方法。
【請求項１３】
ビデオコーディング装置内で実行すると、前記装置に、
画像フレームのビデオブロックの第１のバッチを定義させ、
ビデオブロックの前記第１のバッチを逐次的に復号させ、
ビデオブロックの前記第１のバッチに関連して、ビデオブロックの第２のバッチとビデオブロックの第３のバッチを定義させ、
ビデオブロックの前記第２と第３のバッチを互いに並列に復号させる命令を備える、コンピュータ可読メディア。
【請求項１４】
前記命令を実行すると、前記装置が、
マルチスレッドプロセッサの第１のスレッドを使用して、前記第２のバッチを逐次的に復号し、
前記マルチスレッドプロセッサの第２のスレッドを使用して、前記第３のバッチを逐次的に復号する、請求項１３に記載のコンピュータ可読メディア。
【請求項１５】
前記命令を実行すると、前記装置が、
前記第２のバッチの前記復号が終了すると、前記第１のスレッドのための他のバッチを定義し、
前記第３のバッチの前記復号が終了すると、前記第２のスレッドのための他のバッチを定義する、請求項１４に記載のコンピュータ可読メディア。
【請求項１６】
前記スレッドのうちの１つが復号を実行するために利用可能であり、隣接するビデオブロックのセットにとって必要な全ての情報が利用可能な場合、前記バッチのそれぞれが定義される、請求項１５に記載のコンピュータ可読メディア。
【請求項１７】
前記命令を実行すると、前記装置が、
ビデオブロックの前記第１、第２、および第３のバッチに関連して、ビデオブロックの第４、第５、および第６のバッチを定義し、
ビデオブロックの前記第４、第５、および第６のバッチを並列に復号する、請求項１４に記載のコンピュータ可読メディア。
【請求項１８】
前記命令を実行すると、前記装置が、
前記マルチスレッドプロセッサの前記第１のスレッドを使用して前記第４のバッチを逐次的に復号し、
前記マルチスレッドプロセッサの前記第２のスレッドを使用して前記第５のバッチを逐次的に復号し、
前記マルチスレッドプロセッサの第３のスレッドを使用して前記第６のバッチを逐次的に復号する、請求項１７に記載のコンピュータ可読メディア。
【請求項１９】
前記第１のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第２のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第３のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第２のバッチの前記ビデオブロックは、前記第３のバッチの前記ビデオブロックと隣接しない、請求項１３に記載のコンピュータ可読メディア。
【請求項２０】
前記命令を実行すると、前記装置が、前記バッチのパラメータを定義することによって前記バッチを定義し、それぞれの個々のバッチのために、前記命令が前記画像フレーム内のコラムを定義し、前記画像フレーム内の列を定義し、いくつかの隣接するビデオブロックを定義する、請求項１３に記載のコンピュータ可読メディア。
【請求項２１】
前記命令を実行すると、前記装置が、連続するバッチを定義して、ビデオシーケンスの画像フレームの全ての前記ビデオブロックのために前記連続するバッチを復号する、請求項１３に記載のコンピュータ可読メディア。
【請求項２２】
画像フレームのビデオブロックの第１のバッチを定義し、ビデオブロックの前記第１のバッチに関連してビデオブロックの第２と第３のバッチを定義する復号制御ユニットと、
ビデオブロックの前記第１のバッチを逐次的に復号し、ビデオブロックの前記第２と第３のバッチを互いに並列に復号する１つまたは複数のプロセッサと、
を備える装置。
【請求項２３】
前記１つまたは複数のプロセッサは、複数の並列スレッドを実行するデジタル信号プロセッサ（ＤＳＰ）を備え、前記ＤＳＰは、
前記ＤＳＰの第１のスレッドを使用して、前記第２のバッチを逐次的に復号し、
前記ＤＳＰの第２のスレッドを使用して、前記第３のバッチを逐次的に復号する、請求項２２に記載の装置。
【請求項２４】
前記復号制御ユニットは、
前記第２のバッチの前記復号を終了すると、前記第１のスレッドのために他のバッチを定義し、
前記第３のバッチの前記復号を終了すると、前記第２のスレッドのために他のバッチを定義する、請求項２２に記載の装置。
【請求項２５】
前記スレッドのうちの１つが復号を実行するために利用可能で、隣接するビデオブロックのセットにとって必要な全ての情報が利用可能な場合、前記復号制御ユニットは前記バッチのそれぞれを定義する、請求項２４に記載の装置。
【請求項２６】
前記復号制御ユニットは、ビデオブロックの前記第１、第２、および第３のバッチに関連してビデオブロックの第４、第５、および第６のバッチを定義し、
前記ＤＳＰは、ビデオブロックの前記第４、第５、および第６のバッチを並列に復号する、請求項２３に記載の装置。
【請求項２７】
前記ＤＳＰは、
前記第１のスレッドを使用して前記第４のバッチを逐次的に復号し、
前記第２のスレッドを使用して前記第５のバッチを逐次的に復号し、
第３のスレッドを使用して前記第６のバッチを逐次的に復号する、請求項２６に記載の装置。
【請求項２８】
前記第１のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第２のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第３のバッチのすべてのビデオブロックは前記画像フレーム内で隣接し、
前記第２のバッチの前記ビデオブロックは、前記第３のバッチの前記ビデオブロックと隣接しない、請求項２２に記載の装置。
【請求項２９】
前記復号制御ユニットは、前記バッチのパラメータを定義することによって前記バッチを定義し、前記復号制御ユニットは、それぞれの個々のバッチのために、前記画像フレーム内のコラムを定義し、前記画像フレーム内の列を定義し、いくつかの隣接するビデオブロックを定義する、請求項２２に記載の装置。
【請求項３０】
前記復号制御ユニットは、連続的なバッチを定義し、前記１つまたは複数のプロセッサは、ビデオシーケンスの画像フレームの全ての前記ビデオブロックのために前記連続的なバッチを復号する、請求項１３に記載のコンピュータ可読メディア。
【請求項３１】
ビデオシーケンスの画像フレームを復号する装置であって、
画像フレームのビデオブロックの第１のバッチを定義し、
ビデオブロックの前記第１のバッチを逐次的に復号し、
ビデオブロックの前記第１のバッチに関連して、ビデオブロックの第２のバッチとビデオブロックの第３のバッチとを定義し、
ビデオブロックの前記第２と第３のバッチを互いに並列に復号する装置。
【請求項３２】
前記マルチスレッドプロセッサの第１のスレッドを使用して、前記第２のバッチを逐次的に復号し、
マルチスレッドプロセッサの第２のスレッドを使用して、前記第３のバッチを逐次的に復号する、請求項３１に記載の装置。
【請求項３３】
前記第２のバッチの前記復号が終了すると、前記第１のスレッドのための他のバッチを定義し、
前記第３のバッチの前記復号が終了すると、前記第２のスレッドのための他のバッチを定義し、復号を実行するために前記スレッドのうちの１つが利用可能で、隣接するビデオブロックのセットにとって必要な全ての情報が利用可能な場合、前記バッチのそれぞれが定義される、請求項３２に記載の装置。
【請求項３４】
画像フレームのビデオブロックの第１のバッチを定義するための手段と、
ビデオブロックの前記第１のバッチを逐次的に復号するための手段と、
ビデオブロックの前記第１のバッチに関連して、ビデオブロックの第２のバッチとビデオブロックの第３のバッチとを定義するための手段と、
ビデオブロックの前記第２と第３のバッチを互いに並列に復号するための手段と、
を備える装置。
【発明の詳細な説明】
【関連出願】
【０００１】
本出願は、２００６年１月２５日に出願された同時継続中の出願第１１／３４０，３７８号、名称「ＰＡＲＡＬＬＥＬ  ＤＥＣＯＤＩＮＧ  ＯＦ  ＩＮＴＲＡ−ＥＮＣＯＤＥＤ  ＶＩＤＥＯ」に関係する。
【技術分野】
【０００２】
本開示はデジタルビデオ処理に関し、より詳細には、複数のビデオブロックによって定義された画像フレームの復号技法に関する。
【背景技術】
【０００３】
デジタルビデオ機能は、デジタルテレビ、デジタル直接衛星放送システム、無線通信装置、携帯情報端末（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔｓ：ＰＤＡｓ）、ラップトップコンピュータ、デスクトップコンピュータ、デジタルカメラ、デジタル記録装置、セルラー式または衛星無線電話、直接双方向通信装置（「ウォーキートーキー」と呼ばれることもある）などを含む広範囲の装置に内蔵できる。無線電話および他の通信装置は、ビデオ電話機能（ｖｉｄｅｏ  ｔｅｌｅｐｈｏｎｙ：ＶＴ）とビデオ会議機能をサポートするためにデジタルビデオを利用できる。
【０００４】
デジタルビデオシーケンスをコーディングするために、いくつかの様々なビデオコーディング規格が確立されてきた。たとえば、動画像符号化専門家会合（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ：ＭＰＥＧ）が、ＭＰＥＧ−１、ＭＰＥＧ−２、およびＭＰＥＧ−４を含むいくつかの規格を開発した。他のビデオコーディング規格には、国際電気通信連合（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｔｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｕｎｉｏｎ：ＩＴＵ）によって開発された、ＩＴＵ  Ｈ．２６３とＩＴＵ  Ｈ．２６４規格がある。さらに、個々の企業によって多くの独自のビデオコーディング規格も開発されており、新しい独占的および非独占的規格が出現し続けている。
【０００５】
一般に、ビデオコーディング規格は、画像フレームのために必要なデータ量を圧縮する方法で、ビデオシーケンスの画像フレームのコーディングを容易にする。たとえば、ＭＰＥＧ規格ならびに／またはＩＴＵ  Ｈ．２６3およびＩＴＵ  Ｈ．２６４規格にしたがって、コーディング技法は、フレーム間圧縮（inter-frame compression）を実現するために、時間的またはフレーム間相関（inter-frame correlation）と呼ばれる連続するビデオフレーム間の類似性を利用する。さらに、ビデオコーディング技法は、ビデオフレームを圧縮するために、空間的またはフレーム内相関（intra-frame correlation）と呼ばれる、フレーム内の類似性を利用する。
【０００６】
イントラコーディング（intra-coding）とインタコーディング（inter-coding）のために、ビデオの符号器／復号器（コーデック）は、ビデオシーケンスを定義する画像フレーム内のピクセルのブロック上で動作する。たとえばＭＰＥＧ−４規格では、通常、符号器は伝送されるべきビデオフレームを１６×１６ピクセルアレイを備える「マクロブロック」に分割する。ＭＰＥＧ−４では、マクロブロックを８×８ビデオブロックにさらに分割することもできる。他の例として、ＩＴＵ  Ｈ．２６４規格は、１６×１６ビデオブロック（マクロブロック）をサポートし、１６×８ビデオブロック、８×１６ビデオブロック、８×８ビデオブロック、８×４ビデオブロック、４×８ビデオブロック、および４×４ビデオブロックにさらに分割できる。
【０００７】
所与のビデオブロックのインタコーディングのために、コーデックは、「最良予測（best prediction）」と呼ばれることもある、最も類似するビデオブロックを特定するために、１つまたは複数の直前のビデオフレーム（または、後続のフレーム）の、類似サイズのビデオブロックを探索する。現在のビデオブロックを他のフレームのビデオブロックと比較する処理は、通常、動き推定（motion estimation）と呼ばれる。一旦、「最良予測」がビデオブロックについて特定されれば、符号器は、現在のビデオブロックと最良予測との間の差分を、動き補償（motion compensation）と呼ばれる処理を介して符号化する。動き補償は、符号化されるべき現在のビデオブロックと最良予測との間の差分を示す、差分ブロックを作成する処理を備える。動き補償は、通常、動きベクトルを使用して最良予測ブロックを取り込み、次いで、差分ブロックを生成するために入力ブロックから最良予測を減算する処理を含む。
【０００８】
フレーム内圧縮のために、現在のビデオブロックを同じビデオフレームの他のビデオブロックと比較する処理は、通常、イントラ予測（intra-prediction）（通常、空間推定、または周波数領域推定）と呼ばれる。通常、イントラコーディング処理は、空間推定または周波数領域推定を介して検出された最良予測に基づいて、イントラ符号化ビデオについての差分ブロックを作成する処理を指す。したがって、イントラ予測とイントラコーディングは、一般に、フレーム間圧縮の動き推定および動き補償と類似した、フレーム内圧縮のための処理である。
【０００９】
動き補償またはイントラコーディングが差分ブロックを作成した後、通常、差分ブロックをさらに符号化し圧縮するために、一連の追加の符号化手続きが実行される。これらの追加の符号化手続きは、使用される符号化規格に依存する場合がある。たとえば、追加の符号化手続きは８×８の離散コサイン変換(discrete cosine transform)を含み、スカラー量子化、ラスタージグザグ再配列（raster-to-zigzag reordering）、ランレングス符号化、ハフマン符号化が後に続く。画像フレームのビデオブロック間に現れ得るブロックノイズアーティファクト（blockiness artifacts）を取り除くために、逆ブロックフィルタリング（De-block filtering）も実行される。
【発明の概要】
【００１０】
本開示は、画像フレームの復号処理を加速させるために並列処理技術を利用する、ビデオ復号技法を説明する。本技法は、複数のプロセッサを有する装置において、または、複数の並列スレッドをサポートする単一のプロセッサを利用する装置において使用されうる。本技法には、復号されるべきビデオブロックのバッチを定義することが含まれる。本開示によれば、定義されたバッチのうちの１つまたは複数が、互いに並列に復号されうる。
【００１１】
具体的には、ビデオブロックのそれぞれのバッチが、プロセッサのうちの１つ、またはマルチスレッドプロセッサのスレッドのうちの１つに送信される。ビデオブロックのそれぞれのバッチは、それぞれのプロセッサまたはスレッドによって逐次的に復号される。しかし、２つ以上のバッチの復号は、他のバッチの復号と並列に実行される。このように、画像フレームの復号は、画像フレームの異なるビデオブロックが他のビデオブロックと並列に復号されると、加速されうる。本開示の技法は、挑戦的にはビデオブロックの復号のために、特にはイントラコード化ブロックのために必要な全ての情報が確実に利用できるように構成される。
【００１２】
一実施形態では、本開示は、画像フレームのビデオブロックの第１のバッチを定義することと、ビデオブロックの第１のバッチを逐次的に復号することと、ビデオブロックの第１のバッチに関連して、ビデオブロックの第２のバッチとビデオブロックの第３のバッチとを定義することと、ビデオブロックの第２と第３のバッチを互いに並列に復号することとを備える方法を提供する。
【００１３】
本開示の技法は、ソフトウェアに実装された場合、コンピュータ可読メディア上で実施されうる。その場合、コンピュータ可読メディアは、ビデオコーディング装置において実行されると、その装置に画像フレームのビデオブロックの第１のバッチを定義させ、ビデオブロックの第１のバッチを逐次的に復号させ、ビデオブロックの第１のバッチに関連して、ビデオブロックの第２のバッチとビデオブロックの第３のバッチとを定義させ、ビデオブロックの第２と第３のバッチを互いに並列に復号させる命令を備える。
【００１４】
他の実施形態では、本開示は、画像フレームのビデオブロックの第１のバッチを定義し、ビデオブロックの第１のバッチに関連してビデオブロックの第２と第３のバッチを定義する復号制御ユニットと、ビデオブロックの第１のバッチを逐次的に復号し、ビデオブロックの第２と第３のバッチを互いに並列に復号する１つまたは複数のプロセッサとを備える装置を提供する。
【００１５】
他の実施形態では、本開示は、ビデオシーケンスの画像フレームを復号する装置を提供し、その装置が画像フレームのビデオブロックの第１のバッチを定義し、ビデオブロックの第１のバッチを逐次的に復号し、ビデオブロックの第１のバッチに関連してビデオブロックの第２のバッチとビデオブロックの第３のバッチとを定義し、ビデオブロックの第２と第３のバッチを互いに並列に復号する。
【００１６】
他の実施形態では、本開示は、画像フレームのビデオブロックの第１のバッチを定義するための手段と、ビデオブロックの第１のバッチを逐次的に復号するための手段と、ビデオブロックの第１のバッチに関連してビデオブロックの第２のバッチとビデオブロックの第３のバッチとを定義するための手段と、ビデオブロックの第２と第３のバッチを互いに並列に復号するための手段とを備える装置を提供する。
【００１７】
様々な実施形態のさらなる詳細は、添付の図面と以下の説明において記述する。他の特徴、目的、および諸利点は、その説明と図面から、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１８】
【図１】図１は、本開示の実施形態によるビデオコーディング装置を例示的に示すブロック図。
【図２】図２は、複数のビデオブロックを含む画像フレームの一部を示す概念図。
【図３】図３は、本開示の実施形態によるビデオコーディング装置の、一部の例示的な構成要素を示すブロック図。
【図４Ａ】図４Ａは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｂ】図４Ｂは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｃ】図４Ｃは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｄ】図４Ｄは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｅ】図４Ｅは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｆ】図４Ｆは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｇ】図４Ｇは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｈ】図４Ｈは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｉ】図４Ｉは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｊ】図４Ｊは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｋ】図４Ｋは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｌ】図４Ｌは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｍ】図４Ｍは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｎ】図４Ｎは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｏ】図４Ｏは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｐ】図４Ｐは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｑ】図４Ｑは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｒ】図４Ｒは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｓ】図４Ｓは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図４Ｔ】図４Ｔは、バッチを定義することと、バッチのうちのいくつかを互いに並列に復号することとを含む、復号処理を示す概念図。
【図５】図５は、本開示の実施形態による復号技法を示す流れ図。
【発明の詳細な説明】
【００１９】
本開示は、画像フレームの復号を加速させるために並列処理を利用するビデオ復号技法を説明する。この技法は、処理するための画像フレームのビデオブロックのバッチを定義することを含む。様々なバッチが他のバッチと並列に復号されうる。並列復号処理は、複数のプロセッサ、マルチスレッドプロセッサによって実行された異なるスレッド、またはその両方の組み合わせによって実行されうる。このように、ビデオブロックのバッチは並列処理、すなわち、１セットの並列プロセッサのうちの１つ、またはマルチスレッドプロセッサの１セットのスレッドのうちの１つによって処理される。ビデオブロックのそれぞれのバッチは、それぞれの処理、すなわち、それぞれのプロセッサまたはスレッドによって逐次的に復号される。しかし、２つ以上の異なるバッチの復号は、他のバッチの復号と並列に実行されうる。このように、単一のプロセッサがビデオブロックを逐次モードで処理することに依存する復号技法に関連して、画像フレームの復号は加速されうる。
【００２０】
本開示の技法は、ビデオブロックを復号するために必要な全ての情報が確実に利用できるように構成される。具体的には、ビデオブロックを復号するために必要な全ての情報が確実に利用できるように、バッチが明確に定義される。ビデオブロックは様々に符号化されうるので（たとえば、イントラコード化またはインターコード化）、バッチを定義する処理は、ビデオブロックのタイプ、およびそのビデオブロックがどのように符号化されたかにかかわらず、それぞれのビデオブロックを復号できることを保証しなければならない。このために、バッチのブロックに関連するフレームの他のビデオブロックに注意を払わなければならない。一般に、復号のために処理（スレッドまたはプロセッサ）が利用可能になったとき、およびビデオブロックのバッチが逐次的に復号されるために必要な全ての情報が存在するときは、いつでも新しいバッチが定義される。
【００２１】
たとえば、イントラコード化ビデオブロックは、イントラフレーム依存性を有し、通常、イントラコード化ブロックの近傍のビデオブロックのサブセットうちの１つに依存する。さらに、ＭＰＥＧ−４、ＩＴＵ  Ｈ．２６３、およびＩＴＵ  Ｈ．２６４等の規格については、通常、イントラフレーム依存性はフレームの空間的配置内の現在のビデオブロックより上、または現在のビデオブロックの左に位置する、以前にコード化されたブロックに関してのみ定義される。このようなイントラフレーム依存性を有するビデオブロックを復号するためには、現在のビデオブロックを復号する前に、現在のビデオブロックのイントラコーディングのために使用された近傍のビデオブロックが復号されることが不可欠である。本開示によれば、所与のビデオブロックのあらゆるビデオブロック依存性が、その所与のビデオブロックが復号されるべきときに説明されることを保証する方法で、ビデオブロックのバッチが定義される。
【００２２】
一旦第１のバッチが復号されると、あらゆるビデオブロック依存性がまだ確実にされている間に、２つの新しいバッチ（第２と第３のバッチ）が定義されうる。一旦第２と第３のバッチが復号されると、３つの新しいバッチ（第４、第５、および第６のバッチ）が定義される。一旦第４、第５、および第６のバッチが復号されると、最大４つの追加のバッチを定義でき、以下同様に行われる。複数のプロセッサまたはスレッドについて、複数の並列バッチを積み上げることによって、処理を継続できる。しかし、処理が所与の画像フレームの終わりに近づくにつれて、その処理は並列に処理されるバッチ数は減らされる。本開示によれば、画像フレームの復号処理において定義される第１のバッチと最後のバッチは、それぞれ少なくとも部分的に単独で復号されるのに対して、画像フレームの他のバッチはそれぞれ他のバッチと並列に処理される。複数のプロセッサ（または複数のスレッド）の使用に関連する処理効率は、バッチの並列処理において得られる。
【００２３】
以下の開示において、多くの詳細を分かりやすく提供する。具体的には、次のセットが定義される前に、１セットのバッチが定義され次いで処理される点について、多くの詳細を説明する。しかし実際は、バッチを非同期的に定義することによって、より効率が上がる。つまり、所与のどのプロセッサまたはスレッドについても、そのプロセッサまたはスレッドが利用可能になると、たとえば、そのプロセッサまたはスレッドが現在のバッチを終了するとすぐに、新しいバッチが定義される。１セットのビデオブロックを復号するために必要な全ての情報が利用可能であり、プロセッサまたはスレッドが利用可能である限り、次のバッチを定義できる。しかし、簡略化するために、本明細書の多くの詳細は、並列処理のために同期的に定義されるバッチをセットとして示す。しかし、リソースが利用可能になるときはいつでも、それぞれの後続のバッチを非同期的に定義できるようにすることが好ましい。
【００２４】
図１は、本開示によるビデオコーディング装置２のブロック図である。コーディング装置２は、ビデオシーケンスを符号化または復号するために使用されうる、どのような様々な装置も備えることができる。一般に、コーディング装置２の例は、サーバ、ワークステーション、または他の何らかのデスクトップコンピューティング装置、あるいはラップトップコンピュータ、または携帯型移動端末（ＰＤＡ）などの携帯型コンピューティング装置などの、何らかのコンピュータである。他の例は、デジタルテレビ放送衛星、およびデジタルテレビ、デジタルカメラ、デジタルビデオカメラ、または他のデジタル記録装置などの受信装置である。さらに、他の例は、ビデオ機能を有する移動電話などのデジタルビデオ電話、ビデオ機能を備える直接双方向通信装置、その他の無線ビデオ装置などである。
【００２５】
コーディング装置２は、ビデオ符号化とビデオ復号とを実行するコーデック４を含む。本開示の目的のために、ビデオ復号だけを説明する。しかし、コーデック４は、動き推定器（motion estimator）、動き補償器（motion compensator）、空間推定器（spatial estimator）（または、イントラ予測器）、イントラコーダ、差分計算ユニットなどの、ビデオコーディングを容易にするための構成要素も含む。しかし、ビデオ符号化のためのこれらの構成要素は、簡略化のため本開示内では図示しない。
【００２６】
図１に示されるように、コーデック４は、メモリコントローラ１０を介してメモリ８に接続される復号ユニット６を含む。メモリコントローラ１０は、メモリがビデオデータを取出し復号ユニット６にロードするのを制御する。ビデオシーケンスの符号化された画像フレームはメモリ８に格納され、次いで画像フレームが復号され、その復号されたフレームもまたメモリ８に格納される。通常、メモリ８は様々な可能なメモリ構成のいずれかを表す。
【００２７】
メモリ８は、どのような揮発性または不揮発性の記憶エレメントも備えることができる。メモリ１２は、たとえば符号化処理および復号処理の間、ビデオシーケンスを格納する。場合によっては、メモリ８は、オンチップメモリとオフチップメモリの両方を含む。たとえば、メモリ８は、ビデオシーケンスを格納する比較的大きなオフチップメモリスペースと、復号処理で使用されるより小さくて早いローカルオンチップメモリを含む。その場合、オフチップメモリはダイナミックランダムアクセスメモリ（ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＤＲＡＭ）、またはフラッシュメモリを備えることができ、ローカルオンチップメモリは同期型ランダムアクセスメモリ（ｓｙｎｃｈｒｏｎｏｕｓ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＳＲＡＭ）を備えることができる。しかし、簡略化のために、ビデオコーディングを容易にするために使用できる任意の数のメモリエレメントを表すために単一のメモリ８が示されている。場合によっては、メモリ８は、メモリを他のストレージアプリケーション装置２とシェアできるようにするラインバッファを定義するために構成されてもよく、この場合、メモリコントローラ１０は、メモリ８のこのようなマルチユースを容易にすることができる。
【００２８】
コーデック４は、システムバス１５を介して他の様々な構成要素と接続される。図１に示された例では、装置２は、ビデオイメージのシーケンスのビデオキャプチャーを容易にするために、デジタルカメラなどのビデオキャプチャー装置１２も含む。さらに、装置２は、復号されたビデオデーシーケンスをユーザに呈示するディスプレイ１３を含む。また、装置２は、他の装置との無線通信を容易にする送信機／受信機１４を含む。この場合、コード化されたビデオシーケンスは、送信機／受信機１４を介して送受信される。たとえば、符号化されたビデオシーケンスを受信すると、そのシーケンスはメモリ８に格納されて復号ユニット６によって復号され、次いで、復号されたビデオシーケンスがディスプレイ１３を介してユーザに呈示される。
【００２９】
一般に、コーデック４は符号器、復号器、または統合された符号器／復号器を指す。本明細書で説明する技法は、復号に最も適用可能であるが、復号技法が符号化ステップの一部として使用される場合は特に、符号化の間に適用することができる。コーデック４は、ハードウェア、ソフトウェア、ファームウェア、１つまたは複数のデジタル信号プロセッサ（ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒｓ：ＤＳＰｓ）、マイクロプロセッサ、特定用途向け集積回路（ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔｓ：ＡＳＩＣｓ）、書き替え可能ゲートアレイ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙｓ：ＦＰＧＡｓ）、離散ハードウェア構成要素、またはそれらの様々な組み合わせの内に実装されうる。
【００３０】
本開示によれば、復号ユニット６はバッチ復号制御ユニット１６と１セットの並列処理１８を含む。一般に、並列処理１８は、複数のプロセッサ、または単一のプロセッサによって実行された複数のスレッドを指す。一例では、並列処理１８は、互いに独立に動作する複数の離散プロセッサを指す。他の例では、並列処理１８は、複数のスレッドを含む単一のプロセッサ（ＤＳＰなど）を指す。ＤＳＰの複数のスレッドは、ビデオブロックの異なるバッチを並列に復号することを独立して処理できる仮想プロセッサと見なすことができる。
【００３１】
本開示によれば、バッチ復号制御ユニット１６が画像フレームのビデオブロックの第１のバッチを定義し、一旦第１のバッチが復号されると、第１のバッチに基づいて第２と第３のバッチを定義する。並列処理１８がビデオブロックの第１のバッチを逐次的に復号し、ビデオブロックの第２と第３のバッチを互いに並列に復号する。第２と第３のバッチは、並列処理１８のうちの所与の１つにおいて逐次的に処理されるが、第２のバッチは、処理１８のうちの異なる１つによって（たとえば、マルチスレッドプロセッサの異なるスレッドで）第３のバッチと並列に処理される。
【００３２】
一旦最初の３つのバッチが定義されると、バッチ復号制御ユニット１６は次いでさらに３つのバッチ（たとえば、第４、第５、および第６のバッチ）を定義する。３つのバッチの復号に続いて、１セットの４つのバッチを定義する。それらの４つのバッチの復号に続いて、１セットの５つのバッチを定義する。それぞれのバッチのサイズと、同時に復号するバッチ数の制限は、体系によって定義される。このような制限は、処理１８の数（たとえば、スレッドの数）、復号されるべき画像フレームのサイズ、および他の要素に基づく。本開示は再び、同期セットとして定義されるバッチを示すことによって多くの詳細を提供する。しかし、プロセッサまたはスレッドが利用可能になったときはいつでも、それぞれの個々のバッチができる限り速やかに（非同期的に）定義されることが好ましい。これにより、たとえば、バッチが同期セットとして定義され、あるバッチを復号するために他のバッチよりもより長い時間がかかる場合に生じる、ダウンタイムが避けられる。そのかわり、あるバッチを復号するためにより長い時間がかかる場合（たとえば、ビデオブロックの数、またはこのようなブロックの複雑性のため）、他のバッチが復号を終えると、利用可能なプロセッサまたはスレッドがすぐに新しいバッチの復号を始めることができる。
【００３３】
所与のバッチのすべてのビデオブロックは画像フレーム内で隣接しており、処理１８のうちのそれぞれの１つによって逐次的に処理される。しかし、並列に処理される異なるバッチは、通常互いに隣接しておらず、たいてい画像フレームの異なる列に存在する。それぞれのバッチは、画像フレーム内のコラムを定義するコラムパラメータ、画像フレーム内の列を定義する列パラメータ、およびそれぞれのバッチ内のいくつかの隣接するビデオブロックによって定義される。ビデオブロックのサイズは、それぞれの規格によって確定されない場合、たとえば、１６×１６、８×８、４×４でも定義され得る。
【００３４】
図２は、複数のビデオブロックを含む画像フレーム２０の一部を示す概念図である。画像フレーム２０の図示された部分の異なるビデオブロックは、１〜１８のラベルを付けられている。一般に、これらのそれぞれのビデオブロックは、ピクセルのブロックを備え、異なるピクセル値（Ｒ、Ｇ、Ｂ値）のための複数のデータのセット、または、クロミナンス値と輝度値のためのデータの複数のセットを含む。したがって、本明細書で説明されるそれぞれのビデオブロックは、実際は、画像フレームの離散領域の視覚特性を定義するデータの複数のセットを表すことができる。データのいくつかのブロックは、たとえばクロミナンスと輝度のためのデータの分散したブロックを使用することによって、所与のビデオブロックを表すために使用される。このようなデータブロックのサイズは、ビデオブロックによって定義される所与の領域の輝度に関連して、クロミナンスのオーバーサンプリングまたはアンダーサンプリングによって変化する。ビデオブロックは、所与の領域内のクロミナンスと輝度のためのデータブロックを指す。
【００３５】
一般に、ビデオブロックは、画像フレームの左上の角から右下の角へと、逐次方式(serial fashion)で処理される。つまり、通常ビデオブロックはビデオブロック１からビデオブロック１８へと逐次的に処理される。イントラコード化されたブロックは、この逐次方式で以前に処理されたビデオブロックに依存するので、通常この方法が順調に行く。たとえば、図２の番号８のビデオブロックがイントラコード化されている場合、番号８のビデオブロックは番号１、２、３、または７のビデオブロックに依存する。ビデオブロックが逐次方式で復号される場合、番号８のビデオブロックを復号するときが来ると、番号１、２、３、または７のそれぞれのビデオブロックはすでに復号されているはずである。したがって、番号８のビデオブロックがイントラコード化されていても、このビデオブロックの復号のために必要な全てのデータが利用可能でなければならない。
【００３６】
イントラコード化されたコンテキスト内のフレームの、ビデオブロック間の関係のため、いくつかのビデオブロックを同時に復号することが困難になる。本開示によれば、ビデオブロックのバッチは定義され、並列に処理される。それぞれのバッチは隣接するビデオブロックを含むが、並列に処理される異なるバッチは互いに隣接しない。それぞれのバッチは、そのバッチのビデオブロックに関して逐次的に、しかし他のバッチのビデオブロックと並列に復号される。重要なことには、それぞれの個々のバッチの最初のビデオブロックは、たとえそのビデオブロックがイントラコード化されていても、そのビデオブロックのために必要な全ての復号情報が利用可能なビデオブロックである。それぞれのバッチの最初のビデオブロックの復号に続いて、次のビデオブロックは必要な全ての復号情報を有していなければならない。したがって、それぞれのバッチが逐次的に復号される限り、異なるバッチ内のビデオブロックのタイプにかかわらず、異なるバッチが同時に復号されうる。
【００３７】
図３は、本開示の実施形態によるビデオコーディング装置３０の、一部の例示的な構成要素を示す概念ブロック図である。装置３０の図示された構成要素は、図１の装置２の構成要素に対応する。図３に示されるように、装置３０は、バッチ復号制御ユニット３５、メモリ３２、メモリコントローラ３４、および複数の仮想プロセッサ３８Ａ〜３８Ｎの役割をする異なるスレッドを実行するＤＳＰ３６を含む。それぞれの仮想プロセッサ３８Ａ〜３８Ｎは、他のスレッドとは独立に復号タスクを実行できるＤＳＰ３６のスレッドを備える。３つの仮想プロセッサが図示されているが、ほとんどの実施形態において、仮想プロセッサの数は３個より多い。たとえば、ＤＳＰ３６は６個の仮想プロセッサ（すなわち６個のスレッド）を含む。
【００３８】
バッチ復号制御ユニット３５は、ＤＳＰ３６とは別にマイクロプロセッサを備えることができ、ハードウェア、ソフトウェア、ファームウェア、またはそれらのどのような組み合わせも備えることができる。どのような場合でも、バッチ復号制御ユニット３５はビデオブロックのバッチを定義し、本明細書に説明されるように、そのバッチは同時に復号される。さらに、それぞれのバッチは隣接するビデオブロックを含むが、並列に処理された異なるバッチは他のバッチと隣接しない。ビデオブロックの第１のバッチは単独で復号される。第２と第３のバッチは第１のバッチに関連して定義され、並列に復号される。その後、後続のバッチのセットが、より多くのバッチを漸次含むこともできる。異なる仮想プロセッサ３８は、それぞれのバッチを逐次的に処理する。しかし、異なる仮想プロセッサ３８内の処理は同時に起こりうる。それぞれのバッチが逐次的に復号される限り、仮想プロセッサ３８のうちの異なる１つによって、異なるバッチは同時に復号される。バッチはセットとして（同期的に）処理されうるが、仮想プロセッサ３８のうちの１つが現在のバッチを終了すると、随時新しいバッチが定義されることがより好ましい。復号されるビデオブロックのバッチを定義するために必要な情報が利用可能であり、仮想プロセッサが利用可能である限り、そのプロセッサのバッチはダウンタイムを避けるために定義されるべきである。
【００３９】
それぞれのバッチのサイズとバッチ数の制限は、所与のどの時点でも、プログラムパラメータに基づいてバッチ復号制御ユニット３５によって定義される。バッチのこのような制限は、ＤＳＰ３６内の仮想プロセッサ３８の数と復号されるべき画像フレームのサイズに基づくが、他の要素もバッチのサイズとバッチ数の制限に影響を及ぼす。バッチ復号制御ユニット３５は、画像フレーム内のコラムを定義するコラムパラメータ、画像フレーム内のコラムを定義する列パラメータ、およびそれぞれのバッチ内の隣接するビデオブロックの数によって、それぞれのバッチを定義できる。このような情報が標準によって設定されない場合、ビデオブロックのサイズと形も定義される。
【００４０】
バッチ内のビデオブロックの最小数を定義するパラメータは、バッチが小さすぎる、または大きすぎることのないように保証するためにも使用される。バッチが小さすぎる場合、バッチを定義することに伴う処理オーバーヘッドは、その処理の並列性の処理利得（processing gains）を上回る。さらに、バッチが大きくなりすぎることが可能な場合、処理利得が損なわれる。
【００４１】
図４Ａ〜４Ｔは、画像フレームのバッチまたはビデオブロックを定義することと、様々なバッチのビデオブロックを互いに並列に復号することとを含む、復号処理を示す概念図である。それぞれの図４Ａ〜４Ｔは、復号処理の様々な段階の例示的な画像フレーム４０を示す。比較的単純なこの例では、バッチ数は３つまでに限られている。バッチあたりのビデオブロックの最小数はないが、最大数はバッチあたり８ビデオブロックと定義されている。
【００４２】
図４Ａ〜４Ｔの比較的単純な例は、同期的復号(synchronous decoding)に基づくと最もよく理解される。この場合、バッチのセットは処理のそれぞれの反復で定義され、バッチの新しいセットが定義される前に全てのバッチが完了される。しかし、スレッドが利用可能になり、バッチを定義するためにビデオブロックにとって必要な情報が利用可能なときはいつも、それぞれの処理スレッドのために新しいバッチが随時定義される、非同期復号(asynchronous decoding)が使用されることがより好ましい。しかし、たとえ非同期的処理でより高い効率性を得られるとしても、図４Ａ〜４Ｔの同期の例示は並列復号の諸利点をを提供する。
【００４３】
図４Ａ〜４Ｔのそれぞれは、画像フレーム４０内の符号化されたビデオブロック、画像フレーム４０内の復号されたビデオブロック、および現在のバッチ内で定義されたビデオブロックを定義する鍵を含む。図４Ａ〜４Ｔに示されるビデオブロックは全て類似のサイズを有するが、本開示の技法はこの点において限定するものではない。すなわち、たとえばＩＴＵ  Ｈ．２６４規格、あるいはマクロブロックの再分割を可能にする、または一般に異なるサイズのビデオブロックを可能にする他の規格によれば、異なるビデオブロックは異なるサイズを有することができる。
【００４４】
図４Ａでは、画像フレーム４０の全てのビデオブロックは符号化されたビデオブロックである。図４Ｂに示されるように、復号処理のこの時点で、バッチ復号制御ユニット３５が第１のバッチを定義する。第１のバッチ４０１は８個のビデオブロックを含む。バッチ４０１のビデオブロックは、仮想プロセッサ３８Ａによって逐次方式で復号され、それによって、図４Ｃに示されるように復号されたビデオブロックになる。
【００４５】
図４Ｃに示されるように、第１のバッチ４０１の復号に続いて、バッチ復号制御ユニットが追加のバッチを定義する。図４Ｃのバッチは、それぞれが８個のビデオブロックと７個のビデオブロックを含む、４０２と４０３の２つのバッチを含む。バッチ４０２は、バッチ４０１と同じ列にある１セットのビデオブロックであり、バッチ４０３は、バッチ４０１の１つ下の列にある１セットのビデオブロックである。図２と、たとえビデオブロックがイントラコード化されていても復号が可能であることを保証するために必要な情報についての上記の説明とを再び参照すると、バッチ４０１が復号されているので、バッチ４０２と４０３を復号するための全ての情報が利用可能なことが明らかである。具体的には、それぞれのバッチ４０２と４０３内の最初のビデオブロックは、イントラコーディングが依存できる隣接する位置のビデオブロックを復号している。
【００４６】
バッチ４０２と４０３のビデオブロックは、異なる仮想プロセッサ３８Ａと３８Ｂによって、それぞれ逐次方式で復号される。さらに、バッチ４０２と４０３の復号はそれぞれのバッチのビデオブロックに関して逐次であるが、互いに関して並列である。すなわち、バッチ４０２が仮想プロセッサ３８Ａによって逐次的に復号される間、バッチ４０２は仮想プロセッサ３８Ｂによって逐次的に復号される。図４Ｄは、バッチ４０２と４０３内の全てのビデオブロックの復号後の画像フレーム４０を示す。
【００４７】
次に、図４Ｅに示されるように、バッチ復号制御ユニット３５はより多くのバッチを定義する。具体的には、図４Ｅは４０５、４０６、および４０７の３つのバッチを示す。バッチ４０５は４個のビデオブロックを含み、バッチ４０６は８個のビデオブロックを含み、バッチ４０７は６個のビデオブロックを含む。それぞれのバッチ４０５、４０６、および４０７は隣接するビデオブロックを含むが、異なるバッチのビデオブロックは互いに隣接しない。それぞれのバッチ４０５、４０６、および４０７は、画像フレームの異なるビデオブロックの列に存在する。
【００４８】
図４Ｅに示されるバッチのセットのために、異なるバッチの順調な復号を保証するために必要な全ての情報が、バッチ４０５、４０６、および４０７が定義されるときに存在する。バッチ４０５、４０６、および４０７のビデオブロックは、異なる仮想プロセッサ３８Ａ、３８Ｂ、および３８Ｎによってそれぞれ逐次方式で復号される。さらに、バッチ４０５、４０６、および４０７の復号は、それぞれのバッチ内のビデオブロックに関して逐次であるが、異なるバッチ内のビデオブロックに関して並列である。すなわち、バッチ４０５が仮想プロセッサ３８Ａによって逐次的に復号される間、同時にバッチ４０６が仮想プロセッサ３８Ｂによって逐次的に復号され、同時にバッチ４０７が他の仮想プロセッサ、たとえばプロセッサ３８Ｎによって逐次的に復号される。図４Ｆは、バッチ４０５、４０６、および４０７内の全てのビデオブロックの復号後の画像フレーム４０を示す。
【００４９】
図４Ｇは、バッチ復号制御ユニット３５によって定義された、バッチの他のセット示す。この例では、さらに３つのバッチ、すなわちバッチ４１１、バッチ４１２、およびバッチ４１３が定義されている。これらの異なるバッチのこれらのビデオブロックは、プロセッサ３８のうちの異なる１つによって逐次的に、および互いに関して並列に処理される。図４Ｈは、バッチ４１１、４１２、および４１３内の全てのビデオブロックの復号後の画像フレーム４０を示す。
【００５０】
図４Ｉは、バッチ復号制御ユニット３５によって定義されるバッチの他のセットを示す。この例には、さらに３つのバッチ、すなわちバッチ４１５、バッチ４１６、およびバッチ４１７がある。これらの異なるバッチのこれらのビデオブロックは、プロセッサ３８のうちの異なる１つによって逐次的に、および互いに関して並列に処理される。図４Ｊは、バッチ４１５、４１６、および４１７内の全てのビデオブロックの復号後の画像フレーム４０を示す。
【００５１】
図４Ｋは、バッチ復号制御ユニット３５によって定義される、バッチの他のセット示す。この例には、３つの新しいバッチ、すなわちバッチ４１９、バッチ４２０、およびバッチ４２１がある。これらの異なるバッチのこれらのビデオブロックは、プロセッサ３８のうちの異なる１つによって逐次的に、および互いに関して並列に処理される。図４Ｌは、バッチ４１９、４２０、および４２１内の全てのビデオブロックの復号後の画像フレーム４０を示す。
【００５２】
図４Ｍは、バッチ復号制御ユニット３５によって定義される、追加のバッチを示す。この例では、さらに３つのバッチ、すなわちバッチ４２３、バッチ４２４、およびバッチ４２５が定義されている。これらの異なるバッチのこれらのビデオブロックは、プロセッサ３８のうちの異なる１つによって逐次的に、および互いに関して並列に処理される。図４Ｎは、バッチ４２３、４２４、および４２５内の全てのビデオブロックの復号後の画像フレーム４０を示す。
【００５３】
図４Ｏは、バッチ復号制御ユニット３５によって定義される、追加のバッチを示す。以前のバッチのセットと異なり、図４Ｏは２つのバッチ、すなわちバッチ４２７とバッチ４２８だけを示す。これは、処理が画像フレーム４０の終わりに近づいているためである。一般に、処理は最初のいくつかの反復でバッチ数を増加させ、中間の反復のためにバッチの最大数を維持し、次いで最後の反復のためにバッチ数を減少させる。どのような場合でも、他の反復同様、これらの異なるバッチ４２７と４２８のビデオブロックは、プロセッサ３８のうちの異なる１つによって逐次的に、および互いに関して並列に処理される。図４Ｐは、バッチ４２７と４２８内の全てのビデオブロックの復号後の画像フレーム４０を示す。
【００５４】
図４Ｑは、バッチ復号制御ユニット３５によって定義される、バッチの他のセットを示す。この例では、さらに２つのバッチ、すなわちバッチ４２３とバッチ４３３が示されていれる。これらの異なるバッチのこれらのビデオブロックは、プロセッサ３８のうちの異なる１つによって逐次的に、および互いに関して並列に処理される。図４Ｒは、バッチ４３２と４３３内の全てのビデオブロックの復号後の画像フレーム４０を示す。
【００５５】
図４Ｓは、バッチ復号制御ユニット３５によって定義される最後のバッチ４３５を示す。したがって、この処理の最初と最後のバッチだけが復号される。マルチプロセッサ（または、マルチスレッド）の使用に伴う処理効率は、２つ以上のバッチを同時に処理する際に得られる。最後のバッチ４３５に関して、プロセッサ３８Ａはビデオブロックを逐次的に処理する。図４Ｔは、最後のバッチ４３５内の全てのビデオブロックの復号後の、完全に復号された画像フレーム４０を示す。
【００５６】
図４Ａ〜４Ｔの例示的説明ではバッチ数は最大３つまでしか増加しないが、本開示はそのように限定しない。実際は、特に１列あたりさらに著しく多くのビデオブロックを有するイメージのために、バッチの最大数はより大きい。それぞれの反復は、イントラ依存性（intra-dependency）を定義する不十分に復号されたビデオブロックのために、最大に達するまで、または所与の列内のビデオブロック数がバッチを制限するまでさらなるバッチを追加する。
【００５７】
図４Ａ〜４Ｔの例示において、そのバッチの逐次復号もバッチの全てのビデオブロックが復号されることを保証する、ということを保証するためにそれぞれの個々のバッチが定義される。しかし、時には、他のバッチが並列に復号されるという仮定に基づいて、バッチはより大きく定義される場合がある。たとえば、図４Ｇを参照すると、バッチ４１３は、バッチ４１３の最後の（追加の）ビデオブロックが復号される前に、バッチ４１２の最初のいくつかのビデオブロックが復号されるという仮定に基づいて、追加のビデオブロックを含むように定義される場合がある。したがって、バッチ４１３は、バッチ４１２の１つまたは複数のビデオブロックが復号されるまで復号されることができない、１つまたは複数のビデオブロックを含むように定義される場合がある。バッチ４１２と４１３の並列復号が想定され予期される場合、たとえバッチ４１３に追加のビデオブロックがあっても、その処理は機能することができ、バッチ４１３へのこのような追加のビデオブロックはより高い効率性を提供する。
【００５８】
さらに、図４Ａ〜４Ｔの比較的単純な例は、バッチのセットが処理のそれぞれの反復で定義され、新しいバッチのセットが定義される前に全てのバッチが完了される、同期復号を含む。しかし、処理スレッドが利用可能で、バッチを定義するためにビデオブロックにとって必要な情報が利用可能なときは随時新しいバッチが定義される、非同期復号が使用されることがより好ましい。すなわち、本開示によれば、バッチ復号制御ユニット３５は、仮想プロセッサ３８Ａによって現在のバッチの復号を終了すると、最初の仮想プロセッサ３８Ａ（最初のスレッド）のために他のバッチを定義でき、仮想プロセッサ３８Ｂの現在のバッチの復号が終了すると、第２の仮想プロセッサ３８Ｂ（最初のスレッド）のために他のバッチを独立に定義できる。このように、新しいバッチを定義するためにビデオブロックにとって必要な情報が利用可能な限り、所与のどのスレッドにも、その現在のバッチが終了すると新しいバッチを送信できる。したがって、スレッドのうちの１つが復号を実行するために利用可能で、隣接するビデオブロックのセットにとって必要な全ての情報が利用可能なとき、それぞれのバッチが定義される。
【００５９】
図５は、本開示の実施形態による復号技法を示す流れ図である。図５に示されるように、バッチ復号制御ユニット３５は第１のバッチを定義し（５１）、プロセッサ３８のうちの所与の１つが第１のバッチを復号する（５２）。次いで、バッチ復号制御ユニット３５が第２と第３のバッチを定義する（５３）。プロセッサ３８のうちの異なる１つが、第２と第３のバッチを並列に復号する（５４）。
【００６０】
次に、バッチ復号制御ユニット３５が、第１、第２、および第３のバッチに関連して、第３、第４、および第５のバッチを定義し（５５）、プロセッサ３８のうちの異なる１つが異なるバッチを並列に復号する（５６）。次いで、バッチ復号制御ユニット３５が後続のバッチを定義し（５７）、プロセッサ３８のうちの異なる１つが異なるバッチを並列に復号する（５８）。それぞれのバッチは、それぞれのプロセッサによって逐次的に、しかし他のバッチに対して並列に処理される。プロセッサ３８のうちの所与の１つが利用可能で、バッチを定義するための十分な情報も利用可能なときに、所与のどのバッチも定義される。したがって、第３、第４、および第５のバッチは同時に定義されないが、たとえば、プロセッサ３８のうちの１つが利用可能で、それぞれのバッチを定義するために十分な情報も利用可能なときに、むしろできる限り速やかにそれぞれ定義される。この処理の初めに１つのバッチが定義されるが、その第1のバッチの復号後、２つ以上のバッチが定義される。より多くのバッチが復号されるほど、新しいバッチを定義する機能が向上する。
【００６１】
図５の処理は、画像フレームのすべてのビデオブロックが復号されるまで無期限に継続することができる。処理が画像フレームの終わりに近づくと、並列復号のために定義されうるバッチはほとんどなくなる。所与のどの画像フレームの最初と最後のバッチも、他のバッチと並列に復号されることなく単独で復号されるが、画像フレームの他の全てのバッチは１つまたは複数の他のバッチと並列に復号される。それぞれの個々のバッチは非同期的および他のバッチから独立に定義されるか、バッチのセットは同期方式で定義される。
【００６２】
さらに、図５の処理は、ビデオシーケンスを形成する連続する画像フレームのために繰り返される。１列あたり著しくより多くのビデオブロックを有する画像フレームにとって、定義されるバッチの最大数は著しく大きくなる。処理が進展するにつれて、追加のバッチが並列復号のために最大に達するまで定義される（たとえば、仮想プロセッサまたはスレッドの数に制限される）。場合によっては、所与の列のビデオブロックの数は、イントラ依存性を定義する不十分に復号されたビデオブロックのために、バッチを制限する。この処理は、並列に復号されるべきバッチ数を増加させ、並列に復号されるバッチの最大数を維持し、次いで、処理が画像フレームの終わりに近づくにつれて、並列に復号されるバッチ数を減少させる。それぞれの画像フレームの最初と最後のバッチは、少なくともそれ自身部分的に復号されるが、その他の全てのバッチは他のバッチとともに復号される。
【００６３】
いくつかの実施形態を説明してきた。しかし、添付の特許請求の精神および範囲から逸脱することなく、本明細書で説明した技法に様々な修正を加えることができる。本明細書で説明した技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらのどのような組み合わせにも実装されうる。この技法がソフトウェアに実装された場合、プログラムコードを備えるコンピュータ可読メディアによって実施されることもあり、そのプログラムコードが装置内で実行されると、本明細書に説明した復号技法のうちの１つまたは複数を実行する。その場合、コンピュータ可読メディアは、同期型ダイナミックランダムアクセスメモリ（ｓｙｎｃｈｒｏｎｏｕｓ  ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＳＤＲＡＭ）などのランダムアクセスメモリ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＲＡＭ）、読み出し専用メモリ（ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ：ＲＯＭ）、不揮発性ランダムアクセスメモリ（ｎｏｎ−ｖｏｌａｔｉｌｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＮＶＲＡＭ）、電気的消去可能書き込み可能ＲＯＭ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ：ＥＥＰＲＯＭ）、フラッシュメモリなどを備える。
【００６４】
プログラムコードは、コンピュータ可読命令の形式でメモリに格納されうる。その場合、ＤＳＰなどのプロセッサは、復号技法のうちの１つまたは複数を実行するためにメモリ内に格納された命令を実行できる。場合によっては、この技法は、復号処理を加速するために様々なハードウェアコンポーネントを呼び出すＤＳＰによって実行される。異なる場合では、本明細書で説明したユニットが、マイクロプロセッサ、１つまたは複数の特定用途向け集積回路（ＡＳＩＣｓ）、１つまたは複数の書き替え可能ゲートアレイ（ＦＰＧＡｓ）、またはハードウェアとソフトウェアの他の何らかの組み合わせとして実装されうる。これらおよびその他の実施形態は、添付の特許請求の範囲内である。
【図１】
2009540680.tif 000003
【図２】
2009540680.tif 000004
【図３】
2009540680.tif 000005
【図４Ａ】
2009540680.tif 000006
【図４Ｂ】
2009540680.tif 000007
【図４Ｃ】
2009540680.tif 000008
【図４Ｄ】
2009540680.tif 000009
【図４Ｅ】
2009540680.tif 000010
【図４Ｆ】
2009540680.tif 000011
【図４Ｇ】
2009540680.tif 000012
【図４Ｈ】
2009540680.tif 000013
【図４Ｉ】
2009540680.tif 000014
【図４Ｊ】
2009540680.tif 000015
【図４Ｋ】
2009540680.tif 000016
【図４Ｌ】
2009540680.tif 000017
【図４Ｍ】
2009540680.tif 000018
【図４Ｎ】
2009540680.tif 000019
【図４Ｏ】
2009540680.tif 000020
【図４Ｐ】
2009540680.tif 000021
【図４Ｑ】
2009540680.tif 000022
【図４Ｒ】
2009540680.tif 000023
【図４Ｓ】
2009540680.tif 000024
【図４Ｔ】
2009540680.tif 000025
【図５】
2009540680.tif 000026
【手続補正書】
【提出日】平成21年3月30日(2009.3.30)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００６０
【補正方法】変更
【補正の内容】
【００６０】
次に、バッチ復号制御ユニット３５が、第１、第２、および第３のバッチに関連して、第４、第５、および第６のバッチを定義し（５５）、プロセッサ３８のうちの異なる１つが異なるバッチを並列に復号する（５６）。次いで、バッチ復号制御ユニット３５が後続のバッチを定義し（５７）、プロセッサ３８のうちの異なる１つが異なるバッチを並列に復号する（５８）。それぞれのバッチは、それぞれのプロセッサによって逐次的に、しかし他のバッチに対して並列に処理される。プロセッサ３８のうちの所与の１つが利用可能で、バッチを定義するための十分な情報も利用可能なときに、所与のどのバッチも定義される。したがって、第４、第５、および第６のバッチは同時に定義されないが、たとえば、プロセッサ３８のうちの１つが利用可能で、それぞれのバッチを定義するために十分な情報も利用可能なときに、むしろできる限り速やかにそれぞれ定義される。この処理の初めに１つのバッチが定義されるが、その第1のバッチの復号後、２つ以上のバッチが定義される。より多くのバッチが復号されるほど、新しいバッチを定義する機能が向上する。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項３０
【補正方法】変更
【補正の内容】
【請求項３０】
前記復号制御ユニットは、連続的なバッチを定義し、前記１つまたは複数のプロセッサは、ビデオシーケンスの画像フレームの全ての前記ビデオブロックのために前記連続的なバッチを復号する、請求項２２に記載の装置。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図５
【補正方法】変更
【補正の内容】
【図５】
2009540680.tif 000027
【国際調査報告】
2009540680.tif 000028