(57)【要約】      （修正有）【課題】ＣＰＵとＧＰＵとを用いることで符号化処理を効率化する情報処理装置、制御方法、プログラム、及び記録媒体を提供する。【解決手段】情報処理装置において、ＧＰＵは、符号化対象の画像を分割して得られた、所定の画素数を有する複数のブロックを取得し、各ブロックについて、空間冗長性を排除した中間ブロックを生成する。さらにＧＰＵは、各中間ブロックのデータ列を解析し、該データ列における、値が所定の範囲に含まれるデータの位置を特定する特定情報を生成し、各ブロックの各々について、中間ブロックの少なくとも一部のデータ及び対応する特定情報を記憶装置に出力する。またＣＰＵは、複数のブロックの各々について、対応する特定情報を参照し、記憶装置から該特定情報に対応する少なくとも一部のデータを読み出して圧縮処理を実行する。【選択図】図３
2018014721.tif 000002
【特許請求の範囲】
【請求項１】
中央処理ユニット（ＣＰＵ）とグラフィックス処理ユニット（ＧＰＵ）を有し、画像を符号化する情報処理装置であって、
前記ＧＰＵは、
符号化対象の画像を分割して得られた、所定の画素数を有する複数のブロックを取得する取得手段と、
前記取得手段により取得された前記複数のブロックの各々について、空間冗長性を排除した中間ブロックを生成する排除手段と、
前記排除手段により生成された各中間ブロックのデータ列を解析し、該データ列における、値が所定の範囲に含まれるデータの位置を特定する特定情報を生成する解析手段と、
前記複数のブロックの各々について、前記中間ブロックの少なくとも一部のデータ及び該中間ブロックに対応する前記特定情報を記憶手段に出力する出力手段と、
を有し、
前記ＣＰＵは、
前記複数のブロックの各々について、対応する前記特定情報を前記記憶手段から読み出す読出手段と、
前記読出手段により読み出された前記特定情報を参照し、前記記憶手段から該特定情報に対応する前記少なくとも一部のデータを読み出して圧縮処理を実行する圧縮手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記出力手段は、各中間ブロックについて、データ列に含まれる、値が前記所定の範囲に含まれるデータのみをデータ列の順に並べ、前記少なくとも一部のデータとして出力することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
各中間ブロックについて、データ列に含まれる、値が前記所定の範囲に含まれるデータの数が予め定められた数より多い場合に、
前記解析手段は、該データ列の各データの値を所定値で除して得られた新たなデータ列について前記特定情報を生成し、
前記出力手段は、前記新たなデータ列に含まれる、値が前記所定の範囲に含まれるデータのみをデータ列順に並べ、前記少なくとも一部のデータとして出力する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記解析手段は、前記中間ブロックのデータ列の各データの値を所定値で除した回数を、前記特定情報に含めることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記解析手段は、各中間ブロックについて、データ列の各データの値が前記所定の範囲に含まれるか否かの情報をデータ列順に並べることで、前記特定情報を生成することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記値が所定の範囲に含まれるデータは、前記中間ブロックのデータ列のうち、データ値が非ゼロ値であるデータであることを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記値が所定の範囲に含まれるデータは、前記中間ブロックのデータ列のうち、画質に影響を与えると予め定められたデータであることを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項８】
前記排除手段は、
前記複数のブロックの各々を直交変換する変換手段と、
前記変換手段により直交変換された各ブロックを量子化する量子化手段と、
前記量子化手段により量子化された各ブロックを、画素に対応するデータを所定の順番に並べることで、前記中間ブロックのデータ列を生成する生成手段と、
を有し、
前記圧縮手段は、前記少なくとも一部のデータと前記特定情報とから特定した前記中間ブロックのデータ列を可逆圧縮する
することを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
中央処理ユニット（ＣＰＵ）とグラフィックス処理ユニット（ＧＰＵ）を有し、画像を符号化する情報処理装置の制御方法であって、
前記ＧＰＵが、符号化対象の画像を分割して得られた、所定の画素数を有する複数のブロックを取得する取得工程と、
前記ＧＰＵが、前記取得工程において取得された前記複数のブロックの各々について、空間冗長性を排除した中間ブロックを生成する排除工程と、
前記ＧＰＵが、前記排除工程において生成された各中間ブロックのデータ列を解析し、該データ列における、値が所定の範囲に含まれるデータの位置を特定する特定情報を生成する解析工程と、
前記ＧＰＵが、前記複数のブロックの各々について、前記中間ブロックの少なくとも一部のデータ及び該中間ブロックに対応する前記特定情報を記憶手段に出力する出力工程と、
前記ＣＰＵが、記複数のブロックの各々について、対応する前記特定情報を前記記憶手段から読み出す読出工程と、
前記ＣＰＵが、前記読出工程において読み出された前記特定情報を参照し、前記記憶手段から該特定情報に対応する前記少なくとも一部のデータを読み出して圧縮処理を実行する圧縮工程と、
を有することを特徴とする情報処理装置の制御方法。
【請求項１０】
中央処理ユニット（ＣＰＵ）とグラフィックス処理ユニット（ＧＰＵ）を有し、画像を符号化する情報処理装置の制御方法であって、
前記ＣＰＵ及び前記ＧＰＵの処理特性に基づいて、画像の符号化処理を前記ＣＰＵと前記ＧＰＵとで分散処理する
ことを特徴とする情報処理装置の制御方法。
【請求項１１】
コンピュータを、請求項１乃至８のいずれか１項に記載の情報処理装置の各手段として機能させるためのプログラム。
【請求項１２】
請求項１１に記載のプログラムを記録した、コンピュータが読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、制御方法、プログラム、及び記録媒体に関し、特にＣＰＵとＧＰＵとを利用する符号化技術に関する。
【背景技術】
【０００２】
近年、インターネット等のネットワークを利用した動画配信の分野では、予め符号化した動画データを配信するだけでなく、生成した動画フレームをリアルタイムに符号化し、得られた動画データを配信することも行われている。
【０００３】
このようなリアルタイムに符号化を行って動画データを配信するコンテンツの１つには、ネットワークを介してゲーム画面を提供するゲームコンテンツがある。動画配信サーバはＧＰＵが生成したゲーム画面を、所定の符号化形式に従って符号化し、動画データとして配信することで、クライアント機器において表示されるゲーム画面を提供することができる。
【０００４】
ＧＰＵは、ＣＰＵに比べて多くの演算コアを備え、並列処理に特化するものである。符号化技術の中には、ＧＰＵの並列処理能力に着目し、ＧＰＵを使用した符号化を行うものもある（特許文献１）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−０１７５３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
一方、ＧＰＵは多くの演算コアを備えるため、個々の演算コアの処理能力はＣＰＵに比べて限定的なものとなる。具体的にはＣＰＵとＧＰＵとでは、予め用意される命令セットが異なる。例えば３２bitのビット列中から値が１のビットをカウントする演算をする場合、典型的にはＧＰＵがビットを順番に指定して簡素な命令を繰り返し発行して処理を実行するのに対し、ＣＰＵは予め用意された命令セットを実行するのみで所望の演算結果を得ることができる。即ち、ＧＰＵは並列処理に特化するものである反面、処理を実行するために必要な命令発行が多く、処理内容によっては結果が得られるまでに時間を要することがあった。
【０００７】
上述した特許文献１は、符号化処理を単にＧＰＵで実行しており、このようなＣＰＵ及びＧＰＵの特性を考慮して分散処理を行うものではなかった。
【０００８】
本発明は、上述の問題点に鑑みてなされたものであり、ＣＰＵとＧＰＵとを用いることで符号化処理を効率化する情報処理装置、制御方法、プログラム、及び記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００９】
前述の目的を達成するために、本発明の情報処理装置は、以下の構成を備えることを特徴とする。具体的には情報処理装置は、中央処理ユニット（ＣＰＵ）とグラフィックス処理ユニット（ＧＰＵ）を有し、画像を符号化する情報処理装置であって、ＧＰＵは、符号化対象の画像を分割して得られた、所定の画素数を有する複数のブロックを取得する取得手段と、取得手段により取得された複数のブロックの各々について、空間冗長性を排除した中間ブロックを生成する排除手段と、排除手段により生成された各中間ブロックのデータ列を解析し、該データ列における、値が所定の範囲に含まれるデータの位置を特定する特定情報を生成する解析手段と、複数のブロックの各々について、中間ブロックの少なくとも一部のデータ及び該中間ブロックに対応する特定情報を記憶手段に出力する出力手段と、を有し、ＣＰＵは、複数のブロックの各々について、対応する特定情報を記憶手段から読み出す読出手段と、読出手段により読み出された特定情報を参照し、記憶手段から該特定情報に対応する少なくとも一部のデータを読み出して圧縮処理を実行する圧縮手段と、を有することを特徴とする。
【発明の効果】
【００１０】
このような構成により本発明によれば、ＣＰＵとＧＰＵとを用いることで符号化処理を効率化することが可能となる。
【００１１】
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。なお、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
【図面の簡単な説明】
【００１２】
添付図面は明細書に含まれ、その一部を構成し、本発明の実施の形態を示し、その記述と共に本発明の原理を説明するために用いられる。
【図１】本発明の実施形態に係るＰＣ１００の機能構成を示したブロック図
【図２】本発明の実施形態に係るＰＣ１００で実行される符号化処理を例示したフローチャート
【図３】本発明の実施形態に係るＧＰＵ１０４が実行するデータ生成処理を例示したフローチャート
【図４】本発明の実施形態に係るデータ生成処理における中間データのスキャン順序の一例を示した図
【図５】本発明の実施形態に係るデータ生成処理で生成される出力用データのデータ構成を示した図
【発明を実施するための形態】
【００１３】
［実施形態］
以下、本発明の例示的な実施形態について、図面を参照して詳細に説明する。なお、以下に説明する一実施形態は、情報処理装置の一例としての、ＣＰＵとＧＰＵとを備え、符号化処理を行うＰＣに本発明を適用した例を説明する。しかし、本発明は、ＣＰＵ及びＧＰＵを備え、それらを使用して符号化処理を行うことが可能な任意の機器に適用可能である。
【００１４】
《ＰＣ１００の構成》
図１は、本発明の実施形態に係るＰＣ１００の機能構成を示すブロック図である。
【００１５】
ＣＰＵ１０１は、ＰＣ１００が有する各ブロックを制御する。具体的にはＣＰＵ１０１は、例えばＲＯＭ１０２や記録媒体１０７に格納されている各ブロックの動作プログラムを読み出し、ＲＡＭ１０３に展開して実行することにより、各ブロックの動作を制御する。
【００１６】
ＲＯＭ１０２は、書き換え可能な不揮発性メモリである。ＲＯＭ１０２は、各ブロックの動作またはＰＣ１００の動作に必要となるパラメータ等の情報を記憶する。ＲＡＭ１０３は、揮発性メモリである。ＲＡＭ１０３は、各ブロックの動作プログラムの展開領域としてだけでなく、各ブロックの動作において出力された中間データ等を一時的に記憶する格納領域としても用いられる。
【００１７】
ＧＰＵ１０４は、画面描画に係る処理を行う。ＧＰＵ１０４は、並列処理を行うために複数の演算コアを有し、画面描画に係る処理を並行して実行する。例えば描画する画面が３Ｄシーンの特定の視点に係る画面である場合、ＧＰＵ１０４は３Ｄシーンの描画範囲に含まれる描画オブジェクトを後述の記録媒体１０７から読み出し、ＧＰＵメモリ１０５に展開する。そしてＧＰＵ１０４は、ＧＰＵメモリ１０５に展開した描画オブジェクトに対して所定の描画パラメータに応じた演算処理を実行し、接続されたＶＲＡＭ１０６に画面を生成（描画）する。
【００１８】
記録媒体１０７は、例えばＨＤＤ等の着脱可能な記録装置である。本実施形態では記録媒体１０７が符号化対象の動画データの各フレーム、及び後述の符号化処理により符号化された符号化動画データが記録される。
【００１９】
操作入力部１０８は、例えばマウスやキーボード等のＰＣ１００に接続されたユーザインタフェースである。操作入力部１０８は、ユーザインタフェースに対する操作入力がなされたことを検出すると、対応する制御信号をＣＰＵ１０１に出力し、該操作入力を通知する。
【００２０】
《符号化処理》
このような構成をもつ本実施形態のＰＣ１００における動画データの符号化処理について、図２のフローチャートを用いて具体的な処理を説明する。該フローチャートに対応する処理は、ＣＰＵ１０１が、例えば記録媒体１０７に記憶されている対応する処理プログラムを読み出し、ＲＡＭ１０３に展開して実行することにより実現することができる。
【００２１】
なお、本符号化処理は、例えば動画データの符号化を行うアプリケーションにおいて、符号化開始の指示入力がなされたことを記録媒体１０７が検出した際に開始されるものとして説明する。しかしながら、本発明は動画データの符号化処理に限られるものではなく、後述のような処理工程で行われる静止画データの符号化処理にも適用可能である。また、以下に説明する符号化処理は、本発明が適用される符号化処理を限定するものではなく、１つの例示的な符号化形式における処理工程を概念的に説明するものである。即ち、本実施形態の符号化処理において説明する各処理工程は、符号化対象や採用される符号化形式に応じて適宜変更されてよいことは容易に理解されよう。
【００２２】
Ｓ２０１で、ＣＰＵ１０１は、符号化対象の動画データ（対象動画データ）の情報をＧＰＵ１０４に通知する。対象動画データの情報は、記録媒体１０７に格納された対応する動画ファイルの格納場所の情報等、ＧＰＵ１０４が符号化対象のデータを特定可能な情報であってよい。
【００２３】
Ｓ２０２で、ＧＰＵ１０４は、対象動画データの情報を参照し、対象動画データのうちの符号化を行うフレームの画像（対象ピクチャ）を読み出し、ＧＰＵメモリ１０５に展開する。
【００２４】
Ｓ２０３で、ＧＰＵ１０４は、ＧＰＵメモリ１０５に読み出された対象ピクチャを、並列処理の実行単位である、予め定められた画素数を有するブロックに分割する。なお、対象ピクチャは実際にブロックに分割される必要はなく、例えばＧＰＵメモリ１０５上のメモリアドレスに対して、ブロックを定義するものであってよい。また、本実施形態では詳細を述べないが、対象ピクチャに対してフレーム内予測あるいはフレーム間予測を行う場合は、以下の並列処理とは別に、ピクチャに対して予測処理が行われる。
【００２５】
Ｓ２０４で、ＧＰＵ１０４は、ブロックの各々にＧＰＵ１０４の演算コアを割り当てる。そしてＧＰＵ１０４は、各ブロックについて離散コサイン変換処理（ＤＣＴ）等の直交変換処理及び量子化処理を並列に実行し、各ブロックの空間冗長性を除去する。なお、予測処理が行われている場合は、予測結果が反映されたブロックが本ステップの処理対象となる。また、本実施形態では説明を簡単にするため、各ブロックにＧＰＵ１０４の１つの演算コアが割り当てられるものとして説明するが、本発明の実施はこれに限られるものではない。通常、ＧＰＵ１０４における演算コアの割り当てポリシーはＧＰＵドライバに依存するものであり、例えば単位画素について１コア等、適宜効率的な割り当てがなされてよい。
【００２６】
Ｓ２０５で、ＧＰＵ１０４は、符号化処理においてＧＰＵ１０４による処理が完了した中間データから出力用のデータを生成するデータ生成処理を実行する。
【００２７】
本実施形態のＰＣ１００では、ＧＰＵ１０４及びＣＰＵ１０１を用いて符号化処理を実行する。つまり、符号化処理の過程でＧＰＵ１０４により処理された、ＧＰＵメモリ１０５上の中間データは、ＣＰＵ１０１がアクセス可能なＲＡＭ１０３に移動する必要がある。しかしながら、ＧＰＵ１０４が中間データをＲＡＭ１０３に出力する場合、不図示のバスを介して転送される必要があるが、このときバスの転送帯域を占有してしまい、他の処理が遅延する可能性がある。例えばブロックが８×８画素で構成され、中間データであるブロック内の各データが１６bitの値で構成される場合、１つのブロックについて１６bit×８×８＝１０２４bitの情報が出力されることになる。即ち、対象ピクチャの画素数にもよるが、効率化のために並列処理された複数のブロックそれぞれについて中間データが出力されると、ブロック数に応じた容量のデータが１フレームについて転送されることになる。
【００２８】
このため、本実施形態のデータ生成処理では中間データをより少ない情報量で構成できるようにデータ変換を行う。なお、中間データは後述するように可変長符号化処理において可逆圧縮されるため、出力用データは中間データのデータ列を特定可能なように構成される。
【００２９】
〈データ生成処理〉
ここで、本実施形態のＧＰＵ１０４が実行するデータ生成処理について、図３のフローチャートを用いて詳細を説明する。
【００３０】
Ｓ３０１で、ＧＰＵ１０４は、空間冗長性を除去した各ブロックに含まれるデータ（中間データ）を、後段の可逆圧縮の圧縮率が高くなる効率的な順序でスキャンを開始する。なお、本発明の実施においてスキャンの順序はこれに限られるものではなく、例えば図４に示されるような低い周波数成分（直流成分）から高い周波数成分への順序（所謂ジグザグスキャン）等、他の順序でスキャンが行われてもよい。また、以下の説明では１つのブロックに対応する中間データに対する処理を説明するが、複数のブロックについて本データ生成処理は並行して実行されてよい。
【００３１】
Ｓ３０２で、ＧＰＵ１０４は、スキャンした１データの値が非ゼロ値であるか否かを判断する。ＧＰＵ１０４は、スキャンした１データの値が非ゼロ値であると判断した場合は処理をＳ３０３に移し、ゼロであると判断した場合は処理をＳ３０６に移す。
【００３２】
Ｓ３０３で、ＧＰＵ１０４は、スキャンした非ゼロ値のデータ数が閾値である２８個を超えたか否かを判断する。
【００３３】
本実施形態の符号化処理では、ＧＰＵ１０４において複数のブロックについての直交変換処理や量子化処理等を並行して行うため、処理後の出力用データの出力も並列実行される。この場合、ＲＡＭ１０３における書き込みアドレスの競合が起きることを回避するために、各ブロックに対応する出力用データの書き込み開始アドレスを、該出力用データのデータサイズを考慮して調整する必要がある。一方、ＣＰＵ１０１が後述の可逆圧縮処理を行うためにＲＡＭ１０３に書き込まれた各ブロックのデータ（出力用データ）を読み出す際には、各ブロックのデータの読み出しアドレスが連続していることが好ましい。具体的には、ＲＡＭ１０３からのデータ読み出しにおいて非連続のアドレス変更に係るプリチャージの発生等により読み出し遅延が生じうるため、各ブロックのデータは、ＣＰＵ１０１における処理順にＲＡＭ１０３に書き込まれることが好ましい。
【００３４】
このため、本実施形態のデータ生成処理では、出力用データが一定のデータサイズに収まることの判断基準として、中間データに含まれる非ゼロ値のデータ数の閾値を設けている。本実施形態のデータ生成処理において生成される出力用データは、図５に示されるように、ブロックのスキャン順におけるデータ列において各データが非ゼロ値であるか否かを示す後述のビット列と、非ゼロ値であるデータとで構成する。該出力用データは、含まれる２種類の情報から、中間データのスキャン順におけるデータ列を特定することが可能な構成となっている。つまり、本ステップでは、該出力用データのうち、後者の非ゼロ値であるデータの数が閾値を超えることによって書き込み開始アドレスの競合が生じることを回避するため、上述の判断を行う。
【００３５】
ＧＰＵ１０４は、スキャンした非ゼロ値のデータ数が閾値を超えると判断した場合は処理をＳ３０８に移し、閾値を超えないと判断した場合は処理をＳ３０４に移す。
【００３６】
Ｓ３０４で、ＧＰＵ１０４は、スキャンした１データが非ゼロ値であるか否かを示すビット列（特定情報）の対応ビットを１に設定する。ビット列は、中間データ内のデータ数分存在すればよく、例えばブロックが８×８＝６４画素で構成されていた場合、１bit×６４個＝６４bitのデータ列で構成することができる。本ステップにおいてＧＰＵ１０４は、予めＧＰＵメモリ１０５上に確保した６４bitの領域のビットを、スキャンした順における対応位置のビットを選択して、値を設定することになる。つまり、本ステップと後述のＳ３０６の処理により、該ビット列は、先頭ビットから順に、各ビットが中間データ内のデータをスキャンした順における非ゼロ値であるか否かを示す値を列挙した形式となる。
【００３７】
中間データには、一般的にその値がゼロであるデータが高い頻度で存在する。即ち、中間データ内の各データが１６bitである場合は、値がゼロであるデータであったとしてもＣＰＵ１０１は１６bit分のデータを読み出す必要がある。本実施形態のＰＣ１００では、符号化処理のＣＰＵ１０１に係る処理において、高い頻度で存在するゼロの読み出し回数を低減することで、ＣＰＵ１０１における後述の可逆圧縮処理に要する時間を低減する。つまり、後述の可逆圧縮処理においてＣＰＵ１０１は、該ビット列を読み出すことで、のスキャン順に並べ替えられた中間データのデータ列において、各データが非ゼロ値であるか否かの情報を把握することができる。
【００３８】
Ｓ３０５で、ＧＰＵ１０４は、非ゼロ値であるスキャンした１データを、ビット列に続くデータとして確保した領域に追加で書き込む。即ち、ビット列を設けることで、後述の可逆圧縮処理におけるゼロであるデータの読み出しは排除することができるため、ＲＡＭ１０３に書き込むべき非ゼロ値のみを後続の領域に追加する。
【００３９】
一方、Ｓ３０２においてスキャンした１データが非ゼロ値でないと判断した場合、ＧＰＵ１０４はＳ３０６で、ビット列の対応ビットを０に設定する。なお、対応ビットが予め０で初期化されている場合、本ステップが不要であることは容易に理解されよう。
【００４０】
Ｓ３０７で、ＧＰＵ１０４は、中間データに含まれる全てのデータをスキャンしたか否かを判断する。ＧＰＵ１０４は、全てのデータをスキャンしたと判断した場合は本データ生成処理を完了し、未スキャンのデータが存在すると判断した場合は処理をＳ３０２に戻す。
【００４１】
このように、Ｓ３０４乃至Ｓ３０７の処理を繰り返し行うことで、予め決められたデータサイズの出力用データを生成することができる。例えば、上述のように中間データ内に各々１６bitの値を有するデータが８×８＝６４個存在する場合、Ｓ３０３の処理により非ゼロ値のデータ数が２８個以下であることが保証されるため、出力用データは６４bit＋１６bit×２８＝５１２bit分の固定長データとして構成することができる。即ち、後述のＲＡＭ１０３への書き込みにおいて、複数のブロックの出力用データを書き込みアドレスが連続するように書き込むことができる。
【００４２】
一方、Ｓ３０３においてスキャンした非ゼロ値のデータ数が閾値を超えると判断した場合、ＧＰＵ１０４はＳ３０８で、中間データの全てのデータを２で除して得られた新たな中間データについて、Ｓ３０１からの処理を行う。２で除する計算は、例えばビットシフト演算でよく、これによりデータ値が１、−１であったデータの数を低減することができる。なお、本ステップを１度実行しただけでは、中間データの非ゼロ値のデータ数が閾値以下に収まらない場合は、繰り返し本ステップの処理を実行すればよい。このようにデータ数の調整を行う場合、本ステップの実行回数、即ち２で除した回数が例えばビット列の先頭位置等に識別可能に含められればよい。
【００４３】
なお、中間データの非ゼロ値のデータ数が閾値を超える場合、画質への影響度が低いと思われる、例えば＋２、＋１、−１、−２等のデータ値の絶対値が予め定められた閾値以下であるデータをゼロデータとみなすことで、非ゼロ値のデータ数の調整を行ってもよい。また、画質への影響度が低いと思われるデータをゼロとみなす該手法は、非ゼロ値のデータ数が閾値を超える場合に限らず実行されてもよい。
【００４４】
このようにデータ生成処理を実行することで出力用データを生成した後、ＧＰＵ１０４はＳ２０６で、ＧＰＵメモリ１０５に生成した各ブロックの出力用データをＲＡＭ１０３に転送して各ブロックに対応する開始アドレスから書き込む。
【００４５】
Ｓ２０７で、ＣＰＵ１０１は、ＲＡＭ１０３に書き込まれた各ブロックの出力用データを読み出し、該データ中のビット列を参照しながら可逆圧縮処理を適用して、１フレームに係る符号化動画データを生成する。本ステップで行う可逆圧縮処理は、ハフマン符号化等の所謂エントロピー符号化（可変長符号化）処理である。ＣＰＵ１０１は、本ステップの処理において出力用データから中間データのデータ列の構成を特定した上で、適切な符号を割り当てて圧縮処理を行う。
【００４６】
Ｓ２０８で、ＣＰＵ１０１は、対象動画データに符号化がなされていない異なるフレームが存在するか否かを判断する。ＣＰＵ１０１は、対象動画データに符号化がなされていない後続フレームが存在すると判断した場合は処理をＳ２０２に移し、存在しないと判断した場合は本符号化処理を完了する。なお、本ステップにおける判断は一例であり、例えばＧＰＵ１０４とＣＰＵ１０１との処理がそれぞれ並行して行われている場合、本ステップの実行時には既に次のフレームについてＧＰＵ１０４の処理が開始していてもよい。このような場合は処理をＳ２０２に移すのではなく、ＣＰＵ１０１は符号化処理のうちのＧＰＵ１０４に係る処理が完了するまで待機してＳ２０７の処理を実行するように構成されてよい。
【００４７】
なお、本実施形態ではＰＣ１００におけるバスの転送帯域の占有を回避しつつ、ＣＰＵ１０１のメモリ読み出しに要する時間を低減する好適な一態様について説明した。しかしながら、ＣＰＵとＧＰＵとを用いた符号化処理の効率化はこれに限らず実現可能である。例えば、バスの転送帯域が広く、データ転送における問題が生じない場合は、ビット列に続く出力用データは非ゼロ値のデータのみではなく、中間データの全てのデータが含まれていてもよい。即ち、各データが非ゼロ値であるか否かの情報を示すビット列さえＣＰＵ１０１が把握できれば、読み出す必要がないゼロデータのアドレスを把握することができるため、メモリ読み出しに要する時間を低減することはできる。また例えば、値が所定の範囲（ゼロとみなしてよい範囲）に含まれるデータの、中間データのデータ列における位置が特定できれば、少なくともメモリ読み出しに係る処理時間を低減することができる。このため、ビット列とは異なる形式を有する情報がＲＡＭ１０３に書き込まれてもよい。
【００４８】
またさらに、本実施形態ではＣＰＵ１０１とＧＰＵ１０４の各々が効率的に実行可能な処理の特性に応じて、符号化処理の各工程を分離して実行するものとして説明した。具体的には、所定の演算式で実行可能な簡単な演算を複数のブロックについて並列実行可能な処理（空間冗長性を排除する処理）は、並列計算が得意であるＧＰＵ１０４に割り当てた。また圧縮後のデータサイズが変動的である故に並列実行が困難である処理（可逆圧縮処理）は、ビット解析等の複雑なビット演算が得意であるＣＰＵ１０１に割り当てた。換言すれば、複雑なビット演算に処理時間を要するＧＰＵ１０４には該演算を行う処理をなるべく割り当てず、演算コアが少なく並列処理による効率化が見込めないＣＰＵ１０１には並列演算を行う処理をなるべく割り当てないようにした。しかしながら、本発明の実施はこのようなＣＰＵ１０１及びＧＰＵ１０４の特性に応じて切り分けられて実行されずとも、符号化処理の効率化は見込める。例えばＧＰＵ１０４においてビット演算に要する時間に比べて並列演算による効率化が見込める場合は、ＧＰＵ１０４において中間データのランレングス符号化を行ったデータを出力用データとしてＲＡＭ１０３に書き込んでもよい。これにより、ＣＰＵ１０１はメモリ読み出しに係る時間を短縮した上に、可逆圧縮に係る処理時間を短縮することも可能である。即ち、ＣＰＵ１０１による処理において、中間データそのもののメモリ読み出しに係る時間よりも読み出し時間を短縮可能な出力用データをＧＰＵ１０４が生成することでも、符号化処理の効率化は実現可能である。
【００４９】
以上説明したように、本実施形態の情報処理装置は、ＣＰＵとＧＰＵとを用いることで符号化処理を効率化することができる。具体的には情報処理装置において、ＧＰＵは、符号化対象の画像を分割して得られた、所定の画素数を有する複数のブロックを取得し、各ブロックについて、空間冗長性を排除した中間ブロックを生成する。さらにＧＰＵは、各中間ブロックのデータ列を解析し、該データ列における、値が所定の範囲に含まれるデータの位置を特定する特定情報を生成し、各ブロックの各々について、中間ブロックの少なくとも一部のデータ及び対応する特定情報を記憶装置に出力する。またＣＰＵは、複数のブロックの各々について、対応する特定情報を参照し、記憶装置から該特定情報に対応する少なくとも一部のデータを読み出して圧縮処理を実行する。
【００５０】
［その他の実施形態］
本発明に係る情報処理装置は、コンピュータを情報処理装置として機能させるプログラムによっても実現可能である。該プログラムは、コンピュータが読み取り可能な記録媒体に記録されることにより、あるいは電気通信回線を通じて、提供／配布することができる。
【００５１】
本発明は上記実施の形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
【符号の説明】
【００５２】
１００：ＰＣ、１０１：ＣＰＵ、１０２：ＲＯＭ、１０３：ＲＡＭ、１０４：ＧＰＵ、１０５：ＧＰＵメモリ、１０６：ＶＲＡＭ、１０７：記録媒体、１０８：操作入力部
【図１】
2018014721.tif 000003
【図２】
2018014721.tif 000004
【図３】
2018014721.tif 000005
【図４】
2018014721.tif 000006
【図５】
2018014721.tif 000007