(57)【特許請求の範囲】
【請求項１】
複数の入力データストリームのそれぞれに所定の処理を施して生成した複数の出力データを並列に出力する情報処理方法であって、
各入力データストリームに第１の処理を施して中間データを生成し、当該入力データストリームに対応づけられたバッファに格納するスレッドと、
前記中間データを前記対応づけられたバッファから読み出し第２の処理を施して出力データを生成するスレッドと、を前記複数の入力データストリームのそれぞれに対して生成するステップと、
各入力データストリームに対応する、前記格納するスレッドと前記出力データを生成するスレッドを含む複数のスレッドの処理待ち行列から順次スレッドを取得して処理するステップと、
を含み、
前記処理するステップは、
一の入力データストリームに対応する前記格納するスレッドの処理開始時に、当該入力データストリームに対応づけられたバッファに格納され、読み出されていない前記中間データの量を検出するステップと、
前記中間データの量が当該バッファの容量より小さい規定値より大きいとき、当該格納するスレッドの処理を休止し、前記処理待ち行列に格納したうえ、別の入力データストリームに対応する前記格納するスレッドを含む前記処理待ち行列から、次に処理すべきスレッドを取得して処理を開始するステップと、
を含むことを特徴とする情報処理方法。
【請求項２】
前記処理するステップは、一の入力データストリームに対応づけられたバッファに格納され、読み出されていない前記中間データの量が前記規定値より大きいとき、当該格納するスレッドのイールド処理を行い、別の入力データストリームに対応づけられたバッファに前記中間データを格納するスレッドの処理回数を増加させることを特徴とする請求項１に記載の情報処理方法。
【請求項３】
前記検出するステップは、前記処理するステップにおける、前記格納するスレッド内の処理において実施し、前記格納するスレッドは、前記中間データの量が前記規定値より大きいとき、自らの処理を休止して他のスレッドへ処理を譲るイールド処理を行うことを特徴とする請求項１または２に記載の情報処理方法。
【請求項４】
各入力データストリームに対応する格納するスレッドはその他のスレッドとともに、オペレーティングシステムが決定したスケジュールおよび優先度に基づく順序で、前記処理待ち行列に格納されたうえ前記処理するステップにおいて順次処理が開始されることを特徴とする請求項１から３のいずれかに記載の情報処理方法。
【請求項５】
前記入力データストリームごとに生成した前記格納するスレッドは、処理の再開に対して同一の優先度を有することを特徴とする請求項１から４のいずれかに記載の情報処理方法。
【請求項６】
前記処理するステップは、前記中間データの量が前記規定値以下となったとき、およびそれ以後、前記バッファに格納され、読み出されていない前記中間データが所定の量に達するまでは前記中間データの量が前記規定値より大きくても、当該格納するスレッドの処理を続行することを特徴とする請求項１から５のいずれかに記載の情報処理方法。
【請求項７】
圧縮符号化された複数の動画ファイルをそれぞれ復号化して描画した複数の動画像を並列に表示する動画サムネイル表示方法であって、
各動画ファイルを復号化して生成したテクスチャデータを、当該動画ファイルに対応づけられたテクスチャバッファに格納する処理を行う復号化スレッドと、前記テクスチャデータを前記対応づけられたテクスチャバッファから読み出し、画像フレームデータを生成して対応するフレームバッファに格納する処理を行う描画スレッドとを前記複数の動画ファイルのそれぞれに対し生成するステップと、
各動画ファイルに対応する、前記復号化スレッドと前記描画スレッドを含む複数のスレッドの処理待ち行列から順次スレッドを取得して処理するステップと、
複数の前記動画ファイルの前記画像フレームデータを、対応する前記フレームバッファからそれぞれ読み出し、並列に表示装置に出力するステップと、
を含み、
前記処理するステップは、
一の動画ファイルに対応する前記復号化スレッドの処理開始時に、当該動画ファイルに対応づけられたテクスチャバッファに格納され、読み出されていない前記テクスチャデータの量を検出するステップと、
前記テクスチャデータの量が当該テクスチャバッファの容量より小さい規定値より大きいとき、前記復号化スレッドの復号化に係る処理を休止し、当該スレッドを前記処理待ち行列に格納したうえ、別の動画ファイルに対応する前記復号化スレッドを含む前記処理待ち行列から、次に処理すべきスレッドを取得して処理を開始するステップと、
を含むことを特徴とする動画サムネイル表示方法。
【請求項８】
複数のデータストリームのそれぞれに所定の処理を施して生成した複数の出力データを並列に出力する復号化装置であって、
前記複数のデータストリームを入力する入力部と、
前記入力部に入力した各データストリームに第１の処理を施して中間データを生成し、当該データストリームに対応して設けられたバッファに一時保存するスレッドと、前記対応して設けられたバッファに保存された前記中間データを読み出し、第２の処理を施して出力データを生成するスレッドと、を前記複数のデータストリームのそれぞれに対し生成し、各データストリームに対応する、前記一時保存するスレッドと前記出力データを生成するスレッドを含む複数のスレッドの処理待ち行列から順次スレッドを取得して処理するプロセッサユニットと、
前記プロセッサユニットがデータストリームごとに生成した出力データを並列に出力する出力部と、
を備え、
前記プロセッサユニットは、一のデータストリームに対応する前記一時保存するスレッドの処理開始時に、当該データストリームに対応して設けられたバッファに格納され、読み出されていない前記中間データの量を検出し、前記中間データの量が当該バッファの容量より小さい規定値より大きいときは、当該一時保存するスレッドの処理を休止し、前記処理待ち行列に格納したうえ、別のデータストリームに対応する前記一時保存するスレッドを含む前記処理待ち行列から、次に処理すべきスレッドを取得して処理を開始することを特徴とする復号化装置。
【請求項９】
前記プロセッサユニットは、一のデータストリームに対応して設けられたバッファに格納され、読み出されていない前記中間データの量が前記規定値より大きいとき、当該一時保存するスレッドのイールド処理を行い、別のデータストリームに対応して設けられたバッファに前記中間データを一時保存するスレッドの処理回数を増加させることを特徴とする請求項８に記載の復号化装置。
【請求項１０】
前記プロセッサユニットは、前記中間データの量を検出する処理を、前記一時保存するスレッド内の処理において実施し、当該一時保存するスレッドは、前記読み出されていない中間データの量が前記規定値より大きいとき、自らの処理を休止して前記プロセッサユニットを開放することを特徴とする請求項８に記載の復号化装置。
【請求項１１】
各データストリームに対応する前記一時保存するスレッドはその他のスレッドとともに、オペレーティングシステムが決定したスケジュールおよび優先度に基づく順序で、前記処理待ち行列に格納されたうえ前記プロセッサユニットにおいて順次処理が開始されることを特徴とする請求項８から１０のいずれかに記載の復号化装置。
【請求項１２】
圧縮符号化された複数の動画ファイルをそれぞれ復号化して描画した複数の動画像を並列に表示する情報処理装置であって、
前記動画ファイルのそれぞれに対応した複数のバッファと、
前記動画ファイルを復号化し、生成したテクスチャデータを対応する前記バッファに格納する復号化スレッドと、前記テクスチャデータを前記対応するバッファから読み出し、前記動画ファイルに対応した画像フレームデータを生成する描画スレッドと、を前記複数の動画ファイルのそれぞれに対し生成し、各動画ファイルに対応する、前記復号化スレッドと前記描画スレッドを含む複数のスレッドの処理待ち行列から順次スレッドを取得して処理するプロセッサユニットと、
前記プロセッサユニットにより生成された、複数の前記動画ファイルの前記画像フレームデータを並列に表示する画像表示部と、
を備え、
前記プロセッサユニットは、一の動画ファイルに対応する前記復号化スレッドの処理開始時に、当該動画ファイルに対応づけられたバッファに格納され、読み出されていない前記テクスチャデータの量が当該バッファの容量より小さい規定値より大きいとき、前記復号化スレッドの復号化に係る処理を休止し、当該スレッドを前記処理待ち行列に格納したうえ、別の動画ファイルに対応する前記復号化スレッドを含む前記処理待ち行列から、次に処理すべきスレッドを取得して処理を開始することを特徴とする情報処理装置。
【請求項１３】
前記プロセッサユニットは、前記テクスチャデータの量を検出する処理を、前記復号化スレッド内の処理において実施し、当該復号化スレッドは、前記読み出されていないテクスチャデータの量が前記規定値より大きいとき、自らの処理を休止して前記プロセッサユニットを開放することを特徴とする請求項１２に記載の情報処理装置。
【請求項１４】
前記プロセッサユニットが処理するスレッドは、前記復号化スレッドおよび前記描画スレッド以外のスレッドを含むことを特徴とする請求項１２または１３に記載の情報処理装置。
【請求項１５】
前記複数の動画ファイルごとに生成された前記復号化スレッドは、前記プロセッサユニットによる処理に対し、同一の優先度を有することを特徴とする請求項１２から１４のいずれかに記載の情報処理装置。
【請求項１６】
前記プロセッサユニットは、前記テクスチャデータの量が前記規定値以下となったとき、およびそれ以後、前記バッファに格納され、読み出されていない前記テクスチャデータが所定の量に達するまでは前記テクスチャデータの量が前記規定値より大きくても、前記復号化スレッドの復号化に係る処理を続行することを特徴とする請求項１２から１５のいずれかに記載の情報処理装置。
【請求項１７】
複数のスレッドを切り替えて処理するコンピュータにおいて実行され、複数の入力データストリームからそれぞれ生成した複数の出力データを並列に出力する機能をコンピュータに実現させるコンピュータプログラムであって、
前記複数の入力データストリームを取得する機能と、
各入力データストリームに第１の処理を施して中間データを生成し、当該入力データストリームに対応づけられたバッファに格納するスレッドと、前記中間データを前記対応づけられたバッファから読み出し第２の処理を施して出力データを生成するスレッドと、を前記複数の入力データストリームのそれぞれに対し生成する機能と、
各入力データストリームに対応する、前記格納するスレッドと前記出力データを生成するスレッドを含む複数のスレッドの処理待ち行列から順次スレッドを取得して処理する機能と、
一の入力データストリームに対応する前記格納するスレッドの処理開始時に、当該入力データストリームに対応づけられたバッファに格納され、読み出されていない前記中間データの量を検出し、前記中間データの量が当該バッファの容量より小さい規定値より大きいときは、当該格納するスレッドの処理を休止してプロセッサを開放し、別の入力データストリームに対応する前記格納するスレッドを含む他のスレッドへ処理を譲るイールド処理を行う機能と、
を前記コンピュータに実現させることを特徴とするコンピュータプログラム。
【請求項１８】
圧縮符号化された複数の動画ファイルをそれぞれ復号化して描画した複数の動画像を並列に表示する情報処理装置であって、
各動画ファイルを復号化して生成したテクスチャデータを、当該動画ファイルに対応づけられたテクスチャバッファに格納する処理を行う復号化スレッドと、前記テクスチャデータを前記対応づけられたテクスチャバッファから読み出し、画像フレームデータを生成して対応するフレームバッファに格納する処理を行う描画スレッドと、を前記複数の動画ファイルのそれぞれに対し生成する機能と、
各動画ファイルに対応する、前記復号化スレッドと前記描画スレッドを含む複数のスレッドの処理待ち行列から順次スレッドを取得して処理する機能と、
複数の前記動画ファイルの前記画像フレームデータを、対応する前記フレームバッファからそれぞれ読み出し、並列に表示装置に出力する機能と、
をコンピュータに実現させ、
前記処理する機能において、
一の動画ファイルに対応する前記復号化スレッドの処理開始時に、当該動画ファイルに対応づけられたテクスチャバッファに格納され、読み出されていない前記テクスチャデータの量を検出する機能と、
前記テクスチャデータの量が当該テクスチャバッファの容量より小さい規定値より大きいとき、前記復号化スレッドの復号化に係る処理を休止し、当該スレッドを前記処理待ち行列に格納したうえ、別の動画ファイルに対応する前記復号化スレッドを含む前記処理待ち行列から、次に処理すべきスレッドを取得して処理を開始する機能と、
をさらにコンピュータに実現させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理技術に関し、特に複数の入力データのそれぞれに処理を施し並列に出力する情報処理方法、動画サムネイル表示方法、およびそれを適用する復号化装置および情報処理装置に関する。
【背景技術】
【０００２】
近年の情報処理技術の著しい進歩に伴い、高速演算を行う情報処理装置がより身近なものになってきた。同時に画像や音声など各種データの処理技術等が発展したことにより、ユーザは様々なデータを容易に取得し、再生したり所望の処理を施したりすることができるようになった。
【０００３】
そのような状況において、同種の複数のデータを並列に処理し、並列に出力する技術は、膨大なデータの内容把握や、処理結果の比較といった目的で一般的に利用されるようになった。例えば動画再生装置における圧縮符号化された動画ファイルのサムネイル表示や、多重チャネルでリアルタイムに取得された複数の画像、音声、温度などのデータの画像解析による比較映像など、そのような技術の利用分野は多岐にわたる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
このようなデータの処理装置において並列処理を実現するためには、処理したいデータの数に応じてスレッドを生成し、ＣＰＵやメモリなどの限られたリソースを、時間的、空間的に分割して各スレッドに割り当てる必要がある。したがって、一度に表示するサムネイルの数を増やしたり、入力チャネルの数を増やしてより多くの結果を比較したりしようとすると、スレッドの数が増え、装置の負荷が増大する。このため、例えばサムネイルとして複数の動画をそのまま再生する動画サムネイル表示時や、複数チャネルのデータの経時変化を比較する場合など、リアルタイム性を要求される処理を並列して行う場合に所定の出力レートを確保するためには、並列に出力できるデータの数を増やすことが困難であった。
【０００５】
本発明はこのような課題に鑑みてなされたものであり、その目的は多数のデータを並列に出力する場合であっても、出力を円滑に行うことのできる技術を提供することにある。
【課題を解決するための手段】
【０００６】
本発明のある態様は情報処理方法に関する。この情報処理方法は、入力データストリームに所定の処理を施した中間データを対応するバッファに格納するスレッドを入力データストリームごとに生成し、切り替えて処理するステップと、複数の中間データを対応するバッファからそれぞれ読み出し、複数の出力データとして並列に出力するステップと、を含む。そして、切り替えて処理するステップは、スレッドの処理開始時に、バッファに格納され、読み出されていない中間データの量を検出するステップと、中間データの量が規定値より大きいとき、当該スレッドの処理を休止し、他のスレッドへ処理を切り替えるステップと、を含むことを特徴とする。
【０００７】
ここで「入力データストリーム」は、ある期間に連続的に出力されるべきデータ、または、処理して出力されるべき時間がある許容範囲をもって定められている一続きの時系列データであってよく、圧縮符号化された動画ファイル、音声ファイルなどのデータおよびその組み合わせ、圧縮されていない各種データなどのいずれでもよい。従って「所定の処理」は圧縮符号化されたデータであれば復号化、その他のデータであれば画像解析、音声解析、２次元プロファイル形成など、入力データストリームの種類と所望の出力データによって決定され、同種、異種によらず複数単位の処理を含んでよい。出力データは中間データに必要な処理を施してもよいし、中間データをそのまま使用してもよい。
【０００８】
「スレッド」は一般的にはアプリケーションに対応したプロセスを細分化したある機能を実現する処理単位であるが、ここではそれに限らず、プロセスそのものでも、ある機能を実現するために呼び出されるコンポーネントに対応した処理単位でもよく、何らかの処理または機能の単位に対応すればよい。
【０００９】
本発明の別の態様は動画サムネイル表示方法に関する。この動画サムネイル表示方法は、圧縮符号化された動画ファイルを復号化して生成されたテクスチャデータを対応するテクスチャバッファに格納する処理を行う復号化スレッドと、テクスチャデータを対応するテクスチャバッファから読み出し、画像フレームデータを生成して対応するフレームバッファに格納する処理を行う描画スレッドとを動画ファイルごとに生成し、切り替えて処理するステップと、複数の動画ファイルの画像フレームデータを、対応するフレームバッファからそれぞれ読み出し、並列に表示装置に出力するステップと、を含み、切り替えて処理するステップは、復号化スレッドの処理開始時に、テクスチャバッファに格納され、読み出されていないテクスチャデータの量を検出するステップと、テクスチャデータの量が規定値より大きいとき、復号化スレッドの復号化に係る処理を休止し、他のスレッドへ処理を切り替えるステップと、を含むことを特徴とする。
【００１０】
本発明のさらに別の態様は復号化装置に関する。この復号化装置は、符号化されたデータストリームを入力する入力部と、入力部に入力した複数の前記データストリームを切り替えて順に復号化する復号化部と、復号化部が復号化した中間データを一時保存する、前記データストリームのそれぞれに対応して設けられた複数のバッファと、複数のバッファに保存された複数の前記中間データを読み出し、並列に出力する出力部と、を備え、復号化部は、データストリームの復号化を行う前に、対応するバッファに格納され、読み出されていない中間データの量を検出し、中間データの量が規定値より大きいときは、データストリームの復号化を休止し、他の処理を開始することを特徴とする。
【００１１】
本発明のさらに別の態様は情報処理装置に関する。この情報処理装置は、圧縮符号化された複数の動画ファイルのそれぞれに対応した複数のバッファと、動画ファイルを復号化し、生成したテクスチャデータを対応するバッファに格納する復号化スレッドと、テクスチャデータを前記バッファから読み出し、動画ファイルに対応した画像フレームデータを生成する描画スレッドと、を動画ファイルごとに生成し、切り替えて処理するプロセッサユニットと、プロセッサユニットにより生成された、複数の動画ファイルの画像フレームデータを並列に表示する画像表示部と、を備え、プロセッサユニットは、復号化スレッドの処理開始時に、バッファに格納され、読み出されていないテクスチャデータの量に応じて、復号化スレッドの復号化に係る処理の続行可否を判定することを特徴とする。
【００１２】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１３】
本発明によれば、再生装置や情報処理装置等において、複数のデータの並列出力を効率的に行うことができる。
【発明を実施するための最良の形態】
【００１４】
図１は本実施の形態における情報処理装置の構成を示している。情報処理装置１００は装置全体を統括的に制御するとともに、圧縮符号化された動画ファイルの復号化処理などを行うプロセッサユニット２０、実行中のプログラムや実行に必要なデータを記憶するメモリ７０、ユーザによる入力指示を受け付ける入力装置７５、動画ファイルを保存する記憶装置８０、および復号化した動画ファイルのフレームを表示する表示装置９０を含む。プロセッサユニット２０、メモリ７０、入力装置７５、記憶装置８０、表示装置９０はバス９５によって相互にデータ伝送を行う。
【００１５】
入力装置７５はキーボード、マウス、トラックボールなど一般的に用いられる入力装置のいずれかでよい。記憶装置８０は符号化された動画ファイルを記録したハードディスクや、ＤＶＤ（Digital Versatile Disk）、ＣＤ（Compact Disk）などの記録媒体の読取装置などのいずれかでよい。
【００１６】
プロセッサユニット２０は、情報処理装置１００における処理を制御する管理部３０、管理部３０の管理下で処理を実行する処理部４０を含む。管理部３０はメモリ７０、入力装置７５、記憶装置８０、表示装置９０とプロセッサユニット２０とのデータの入出力を制御するほか、処理部４０における処理のスケジューリングを行い、複数のプロセスやスレッドを切り替えて処理するように制御する。
【００１７】
記憶装置８０に保存された圧縮符号化された複数の動画ファイルは、ユーザによる入力装置７５に対する動画サムネイル表示の指示により管理部３０の制御のもと、メモリ７０に格納される。処理部４０はメモリ７０に格納された複数の動画ファイルを並列して復号化し、最終的に出力すべき画像フレームデータを動画ファイルごとに生成する。そして管理部３０が、生成された画像フレームデータを表示装置９０の画面内で動画ファイルごとに設けた領域に順次出力するよう制御を行うことにより、表示装置９０に動画サムネイルが複数表示される。
【００１８】
なお圧縮符号化はＭＰＥＧ４、Ｈ．２６４／ＡＶＣ、ＳＶＣ（Scalable Video Coding）など一般的な圧縮符号化手法のいずれに基づいていてもよい。
【００１９】
本実施の形態では１つの動画ファイルに対する動画サムネイル表示のための復号化処理を、１つのスレッドによって行う。従って複数の動画ファイルの動画サムネイルを表示させるためには、処理部４０において複数の動画ファイルを復号化する複数のスレッドを並列に処理する。さらに処理部４０は、復号化したデータに基づき画像フレームデータを生成するスレッドや、動画サムネイル表示以外のプロセスまたはスレッドも並列に処理する。処理部４０は複数のサブプロセッサで構成されていてもよい。この場合も管理部３０は、時分割したスレッドを各サブプロセッサに割り当てることにより、複数のスレッドを並列処理するように制御を行う。
【００２０】
この情報処理装置１００では、情報処理装置１００を効率よく使用するための機能、環境を提供し、装置全体を統括的に制御するオペレーティングシステム（以下、ＯＳと略す）が実行される。そのＯＳ上で複数のアプリケーションソフトウェア（以下、単にアプリケーションという）が実行される。例えば管理部３０におけるスレッドのスケジューリングには、一般的なマルチスレッド対応の装置において導入されているＯＳをそのまま利用することができる。
【００２１】
図２は処理部４０およびメモリ７０のうち、動画サムネイル表示を行うための構成を示している。図２や図１のプロセッサユニット２０などにおいて、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他のＬＳＩで構成することができ、ソフトウェア的には、画像処理機能のあるプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
【００２２】
例えば図２に示した処理部４０のブロックのうち破線で囲まれた要素は、ある動画ファイルの復号化を行うためのスレッドである、復号化スレッド４３を処理するための機能ブロックを示している。上述のとおり本実施の形態では動画ファイルごとに復号化処理を行うスレッドが生成されるため、実際には復号化スレッド４３と同様の構成を有する復号化スレッドが複数存在し、ＯＳが割り当てたタイムスライスごとにそれぞれのスレッドに含まれる機能が発揮されることになる。描画部５０も動画ファイルごとに描画スレッド５１が生成され、タイムスライスごとに異なる動画ファイルの画像フレームデータが生成される。
【００２３】
処理部４０では上述のとおり、図２で示した動画サムネイル表示を行うためのスレッド以外のスレッドを処理する場合もある。この際は、処理部４０ではあるタイムスライスにおいてまた別の機能が発揮されることになるが、本実施の形態ではその機能を限定しないため、機能ブロックは同図では省略する。
【００２４】
メモリ７０は、圧縮符号化された動画ファイルを格納するファイル格納部４７と、各フレームのテクスチャデータを保存するテクスチャバッファ４８と、表示装置９０に表示させる画像フレームデータを保存するフレームバッファ５２を含む。テクスチャバッファ４８およびフレームバッファ５２は図示しないグラフィックメモリなどを別に設け、その中に領域を確保してもよい。テクスチャバッファ４８とフレームバッファ５２は動画ファイルごとに領域が割り当てられ、復号化スレッド４３や描画スレッド５１は、それぞれに対応した動画ファイルに割り当てられたテクスチャバッファ４８およびフレームバッファ５２の領域を使用する。以後の説明では、テクスチャバッファ４８およびフレームバッファ５２内の個別の領域も、テクスチャバッファ４８、フレームバッファ５２と呼ぶ。
【００２５】
処理部４０は動画ファイルの復号化スレッド４３として、メモリ７０のファイル格納部４７から圧縮符号化された動画ファイルを取得する初期処理部４２、符号化された動画ファイルを復号化する復号化部４４、復号化したデータをテクスチャデータとしてテクスチャバッファ４８に保存するバッファ書込部４６を含む。処理部４０はさらに、テクスチャデータをテクスチャバッファ４８から読み出し画像フレームデータを生成してフレームバッファ５２に書き込む描画部５０を、描画スレッド５１として含む。
【００２６】
初期処理部４２は後述するように、テクスチャバッファ４８に格納されたテクスチャデータのフレーム数に基づき、以後の処理を続行するかどうかの決定も行う。バッファ書込部４６は復号化部４４において復号化したデータに対しＲＧＢ変換など必要な処理を施してテクスチャデータとしてもよい。描画部５０は動画ファイルの種類によって、ポリゴンにテクスチャを貼り付けるなどの必要な処理を適宜行い画像フレームデータを生成する。画像フレームデータの生成に必要なデータのうち、テクスチャデータ以外のデータは、描画部５０がメモリ７０より適宜読み込んでよい。
【００２７】
次に上記の構成によって本実施の形態を実現するための動作について説明する。本実施の形態では複数の動画サムネイル表示処理を効率化するために、処理部４０における復号化スレッド４３の処理時間を、スレッド自身によって変化させる。本実施の形態の効果を明らかにするため、まず一般的なＯＳによって割り当てられたタイムスライスをそのまま適用した場合について説明する。
【００２８】
図３は処理部４０におけるスレッド切り替えの例を模式的に示している。同図横方向が時間軸であり、第１復号化スレッド４３ａ、第１描画スレッド５１ａ、第２復号化スレッド４３ｂ、第２描画スレッド５１ｂ、動画サムネイル表示以外のスレッドである他スレッド５５が、各タイムスライスごとに順番に処理されている。実際には第１復号化スレッド４３ａの後に他スレッド５５が処理されるなど、優先度に基づくＯＳのスケジューリングによって順番は様々となる。
【００２９】
割り当てられた処理時間が終了したら、各スレッドはＣＰＵの割り当てを開放し、次の処理時間が到来するまで実行待ちの行列に並んで待機状態となる。復号化スレッド４３および描画スレッド５１は第１および第２の２つに限らず、サムネイル表示を行いたい動画ファイルの数だけ発生する。全てのスレッドは図示した時間以降も、繰り返し処理が行われる。
【００３０】
第１復号化スレッド４３ａのバッファ書込部４６は、テクスチャバッファ４８内の割り当てられた領域である第１テクスチャバッファ４８ａに動画のテクスチャデータをフレームごとに格納する。第１復号化スレッド４３ａが待ち行列に並んでいる間に、第１描画スレッド５１ａの処理が開始されると、描画部５０は第１テクスチャバッファ４８ａ内のテクスチャデータをフレームごとに消費して、当該動画の画像フレームデータを生成し、フレームバッファ５２内の割り当てられた領域、第１フレームバッファ５２ａへ格納する。これらの処理を繰り返すことにより、１つの動画ファイルの動画サムネイルが表示装置９０に表示される。
【００３１】
同様に、第２復号化スレッド４３ｂが第２テクスチャバッファ４８ｂへテクスチャデータを格納し、第２描画スレッド５１ｂがそれを消費して第２フレームバッファ５２ｂに画像フレームデータを格納することによって、別の動画ファイルの動画サムネイルが表示装置９０に表示される。
【００３２】
各描画スレッド５１が一度の処理時間で消費しきれなかったテクスチャバッファ４８内のテクスチャデータはそのままテクスチャバッファ４８に残り、各復号化スレッド４３のバッファ書込部４６は、新たに生成したテクスチャデータをテクスチャバッファ４８に追加して格納していく。
【００３３】
バッファ書込部４６はテクスチャデータをテクスチャバッファ４８に格納するとともに、テクスチャバッファ４８内に格納されているテクスチャデータのフレーム数をカウントするカウンタ（不図示）を動作させる。あるタイムスライスにおいて処理部４０が復号化スレッド４３を処理中、バッファ書込部４６がテクスチャバッファ４８の容量が満たされた、または満たされつつあることを当該カウンタにより検知すると、復号化スレッド４３はタイムスライス中でもＣＰＵの割り当てを開放して実行待ちの行列に並ぶ。後に述べるように、本実施の形態ではカウンタは初期処理部４２によっても参照される。
【００３４】
ところで復号化部４４における動画ファイルの復号化の速度は、元の画像に依存して変化する。例えば基準フレームから得られる予測画像と実際の画像との差分画像を利用した予測符号化を行った動画ファイルにおいては、ほとんど動きのないシーンと、動きの早いシーンや色の変化の大きいシーンとで演算量が異なり、前者の方が復号化の速度が速い。復号化の速度は１つの動画ファイルにおいてもシーンによって変化する。さらに動画サムネイル表示のように一斉に複数の動画ファイルを再生した場合には、同一時刻において動画ファイル間で速度の大小が発生する。
【００３５】
図４はある時点で復号化の速度が異なる２つの動画ファイルの復号化スレッド、第１復号化スレッド４３ａおよび第２復号化スレッド４３ｂがそれぞれ使用する、２つのテクスチャバッファ、第１テクスチャバッファ４８ａおよび第２テクスチャバッファ４８ｂにおけるテクスチャデータの格納状況を模式的に示している。ここで第１復号化スレッド４３ａは復号化速度の速い動画ファイルの復号化スレッド、第２復号化スレッド４３ｂは復号化速度の遅い動画ファイルの復号化スレッドとする。
【００３６】
各スレッドに割り当てられた第１テクスチャバッファ４８ａおよび第２テクスチャバッファ４８ｂは、同図の例では８フレーム分のテクスチャデータを格納することができ、１フレーム分を１つの矩形で示している。さらに１フレーム分を表す矩形内に示された「○」は、テクスチャバッファ４８に格納され、消費される前のテクスチャデータのフレーム数を表している。同図の例では第１テクスチャバッファ４８ａには７フレーム分、第２テクスチャバッファ４８ｂには１フレーム分のテクスチャデータが格納されている。
【００３７】
一般的にＯＳは、各スレッドに均等に処理時間を割り当てる。そのため、１回の処理時間において復号化速度の速い第１復号化スレッド４３ａが処理できるフレーム数は、第２復号化スレッド４３ｂより多くなる。さらに第１復号化スレッド４３ａは、割り当てられた第１テクスチャバッファ４８ａの容量を満たしてタイムスライスの満了を待たずにＣＰＵの割り当てを開放する確率が高くなるため、複数のサブプロセッサで複数のスレッドを並列に処理する環境下では、待ち行列に並ぶ回数が第２復号化スレッド４３ｂより多くなる。この場合もＯＳは、「動画ファイルの復号化」という共通のスレッドである第１復号化スレッド４３ａおよび第２復号化スレッド４３ｂの双方に同一の優先度を与えるため、結果として第１復号化スレッド４３ａが処理される回数は第２復号化スレッド４３ｂに比べて多くなる。
【００３８】
以上のことから、図３に示すように、第１復号化スレッド４３ａに割り当てられた第１テクスチャバッファ４８ａは、第２復号化スレッド４３ｂに割り当てられた第２テクスチャバッファ４８ｂより、格納されているテクスチャデータの量が恒常的に多くなる。さらにこのような状況下では、第２復号化スレッド４３ｂに対応する動画ファイルのテクスチャデータの蓄積が少なく、対応する第２描画スレッド５１ｂの処理が開始されても十分な数の画像フレームデータが生成できない可能性がある。結果として画像フレームデータが表示装置９０における出力タイミングに間に合わず、動画サムネイルがコマ落ちする確率が高くなる。
【００３９】
動画サムネイルのコマ落ちを防止するために、復号化速度の遅い動画ファイルの復号化スレッドの優先度を上げるなど、スケジューリング時の優先度を動的に割り振るようにＯＳ上で操作を行うと、動画サムネイル表示と関係しない他のプロセスの優先度が相対的に下がる場合が発生しうる。他の重要なプロセスの処理の優先度が不安定になる状況は望ましくないため、本実施の形態では一般的なＯＳが提供する優先度やスケジューリングをそのまま導入しながら、動画サムネイルのコマ落ち削減を実現する。
【００４０】
上述のとおり復号化速度の速い復号化スレッドと復号化速度の遅い復号化スレッドとでは、テクスチャバッファ４８におけるテクスチャデータの蓄積量に差が生じる。本実施の形態ではこの差を利用し、「復号化スレッド」のグループ間で復号化速度の遅い復号化スレッドを優先して処理するようにする。さらに復号化速度はシーンによりリアルタイムで変化するため、優先状況はそれに応じて変化させる。
【００４１】
具体的にはテクスチャバッファ４８におけるテクスチャデータの格納量に第１のしきい値Ｆ１および第２のしきい値Ｆ２（Ｆ１＜Ｆ２）を設ける。ここで第２のしきい値Ｆ２はテクスチャバッファ４８中の割り当てられた容量、またはそれに近い容量である。そしてテクスチャデータの格納量が一旦第２のしきい値Ｆ２を超えたら、テクスチャデータの格納量が第１のしきい値Ｆ１以下になるまで復号化を行わずにＣＰＵの割り当てを開放して次のスレッドに処理を譲るイールド（Yield）処理を行う（以下、イールドと呼ぶ）。そして描画部５０によってテクスチャデータが消費され、格納されているテクスチャデータが第１のしきい値Ｆ１以下になったら復号化処理を再開し、格納量が再び第２のしきい値Ｆ２を超えるまで処理を続ける。
【００４２】
図５は本実施の形態の復号化スレッド４３の割り当て処理時間における処理手順を示している。まずＯＳが当該復号化スレッド４３に対して割り当てた時間が開始すると（Ｓ１０）、初期処理部４２は図示しないレジスタ等に記憶したフラグ値を確認する（Ｓ１２）。フラグ値は、ユーザが動画サムネイル表示機能を起動させた直後など、当該復号化スレッド４３の初期状態では「０」である。フラグが０であったら（Ｓ１２のＹ）、初期処理部４２はメモリ７０から復号化対象となる動画ファイルを取得する（Ｓ２０）。そして復号化部４４およびバッファ書込部４６が復号化およびテクスチャバッファ４８への書き込み処理を通常通り行う（Ｓ２２）。
【００４３】
テクスチャデータを書き込んだ際、バッファ書き込み部４６はカウンタによって、テクスチャバッファ４８に格納されているテクスチャデータのフレーム数が第２のしきい値Ｆ２に到達したかを確認する（Ｓ２４）。格納量が第２のしきい値Ｆ２より小さければ（Ｓ２４のＹ）、当該スレッドの割り当て時間が満了するまで、復号化処理を続行する（Ｓ２８のＮ、Ｓ２０）。テクスチャデータの格納量が第２のしきい値Ｆ２となったら（Ｓ２４のＮ）、フラグ値を「１」に設定し、ＯＳの制御のもとレジスタの値をメモリ７０に退避させるなどの処理を行いスレッド処理を終了させる（Ｓ３０）。Ｓ３０のステップは、テクスチャデータの格納量が第２のしきい値Ｆ２へ到達する前に割り当て時間が満了した場合（Ｓ２８のＹ）も同様に行う。
【００４４】
復号化スレッド４３の処理開始時にフラグ値が「１」であった場合（Ｓ１２のＮ）、初期処理部４２はバッファ書き込み部４６が管理するカウンタにより、テクスチャバッファ４８に格納されているテクスチャデータのフレーム数を検出する。そして格納されているフレーム数が第１のしきい値Ｆ１より大きいかを確認する（Ｓ１４）。
【００４５】
第１のしきい値Ｆ１としては、例えば図４で示したテクスチャバッファ４８において、８フレーム分の記憶容量に対して２フレーム分など、復号する動画ファイルの符号化方法や、必要なフレームレートなどに応じて適宜計算あるいは実験によって求める。第１のしきい値Ｆ１を２フレーム分とすると、図４の例では、第１テクスチャバッファ４８ａは規定値より多いフレーム数のテクスチャデータが、第２テクスチャバッファ４８ｂは規定値以下のフレーム数のテクスチャデータが格納されている。
【００４６】
テクスチャデータの格納量が第１のしきい値Ｆ１より大きかったら（Ｓ１４のＹ）、画像フレームデータの生成に十分なテクスチャデータの蓄積があるものとしてイールドする。この際は、通常のＯＳによるスレッド切り替え時と同様に、レジスタの値をメモリ７０に退避させるなどの処理を行う（Ｓ１８）。この処理は実際にはＯＳに用意された機能を呼び出すことによりＯＳが行ってもよい。
【００４７】
テクスチャデータの格納量が第１のしきい値Ｆ１以下であったら（Ｓ１４のＮ）、初期処理部４２はフラグ値を「０」とする（Ｓ１６）。そして上述のＳ２０からＳ３０のステップを行うことにより、テクスチャデータを貯めていく。
【００４８】
以上の手順により、復号化速度の速い動画ファイルやあるシーンでは、復号化スレッド４３の処理順が回ってきても、スレッドが自らイールドすることによって処理時間の消費が抑えられる。その分、他のスレッド、ひいては復号化速度の遅い他の復号化スレッドの単位時間あたりの処理回数が増加し、結果的には他の復号化スレッドの優先度を上げていることになる。このときＯＳが決定した優先度はそのままであるため、動画ファイルの復号化スレッド以外のスレッドとの相対的な優先度には影響せず、他のプロセスの動作が遅くなるなどの不安定要素は発生しない。
【００４９】
そして１回の処理時間内で生成できるテクスチャデータのフレーム数が小さい、復号化に時間のかかる動画ファイルやシーンを復号化するスレッドは、単位時間あたりの処理回数が増加することによってテクスチャバッファ４８におけるテクスチャデータの格納量を増加できる。復号化速度の速い復号化スレッドは、イールドすることによってテクスチャデータが消費されるのみになり、テクスチャバッファ４８における格納量が一旦減少するが、第１のしきい値Ｆ１で設定した不足しない範囲の下限に達すると再び格納を開始する。
【００５０】
そして格納量が第２のしきい値Ｆ２に到達するまでは、復号化速度の速い復号化スレッドも復号化処理を続けて行う。このため一旦イールドに転じた復号化スレッドは、テクスチャデータの貯蓄が十分であることから、割り当て時間が到来しても連続してイールドを行うことになり、まとまった時間を他のスレッドに譲ることができる。そして復号化速度の遅い復号化スレッドは譲られた時間を利用して効率よく復号化処理を行うことができる。
【００５１】
結果として、描画部５０が画像フレームデータの生成を行うのに十分な量のテクスチャデータがいずれの復号化スレッド４３に割り当てられたテクスチャバッファ４８にも格納されることになり、動画サムネイルのコマ落ちを削減することができる。
【００５２】
実際に２５個の動画サムネイルを表示した場合に本実施の形態を適用した。本実施の形態を適用せず、ＯＳによる処理時間制御のみを行った場合、２５個の動画において１秒間に合計２０〜３０フレームのコマ落ちが確認されたのに対し、本実施の形態を適用することによって、１秒間に合計数フレームレベルのコマ落ちに抑えることができた。このようなレベルであれば、ユーザがコマ落ちを視認する可能性は極めて少ない。
【００５３】
以上述べた本実施の形態によれば、動画サムネイルを複数表示させる際、復号化速度の速い動画の復号化スレッドと、復号化速度の遅い動画の復号化スレッドとを、テクスチャバッファにおけるテクスチャデータの格納量をリアルタイムで検出して判断する。そして復号化速度の速い復号化スレッドは、ＯＳによる処理開始時間が開始しても復号化処理を行わずにイールドする。イールドはテクスチャデータが不足しない範囲で行われる。これにより、処理時間を有効に活用して、復号化速度の遅い動画の復号化スレッドの単位時間あたりの処理回数を増加させることができ、テクスチャデータの蓄積不足によるコマ落ちを削減することができる。
【００５４】
本実施の形態はソフトウェアの改良により、実質上、動画サムネイル表示の処理速度を増加させることができ、ＣＰＵやバスなどハードウェアの改良による処理速度向上と比較して安価なコストで導入することができる。またＯＳも一般的な動作を行うのみでよいため、携帯端末から大規模なシステムまで様々な装置に汎用的に適用することができる。
【００５５】
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００５６】
例えば本実施の形態では復号化スレッドがイールドを行うバッファ格納量のしきい値をあらかじめ設定したが、動画サムネイル表示をさせながら、動画ファイルの符号化方法や表示装置などに対して適応的にしきい値を自動的に決定するようにしてもよい。
【００５７】
また本実施の形態では複数の動画サムネイル表示を行うために生成した、複数の復号化スレッド間で処理時間の譲渡を行ったが、割り当てられたバッファにそれぞれが出力を行う複数のスレッドと、バッファに格納されたデータをそれぞれ消費するスレッドと、を生成させるプロセスであれば同様の処理を適用することができる。例えば、カメラやマイク、温度センサなど外部デバイスから入力した複数のリアルタイムデータをそれぞれ画像化、音声処理などして出力するなどのマルチ入出力装置、複数台のネットワークコンピュータから取得した複数のデータから複数の出力を行う処理などに適用できる。
【００５８】
このような処理を行う装置において、さらに別のプロセスが実行されている場合など、ＯＳが決定した各スレッドの優先度を変化させることが困難な状況においては、本実施の形態は特に効果的である。
【００５９】
また本実施の形態はＯＳが同一の処理時間を各スレッドに割り当てるプリエンプティブ方式のマルチスレッドにおける処理手順を示しているが、各スレッドが所定の処理タイミングでＣＰＵの割り当てを開放することによってスレッド処理の切り替えを行うノンプリエンプティブ方式のマルチスレッドにおいても適用できる。この場合も復号化速度の遅速によって実行待ちの行列に並ぶ回数に差が生じるため、復号化速度の速い復号化スレッドがイールドすることによって、復号化速度の遅い復号化スレッドの処理回数を増加させることができ、本実施の形態と同様の効果を得ることができる。このときは、図５におけるＳ２８の割り当て時間満了確認処理に代わり、切り替えタイミングの処理が行われたかの確認処理を行えばよい。あるいはＳ２４Ｎの、テクスチャデータの格納量がＦ２となったタイミング自体を切り替えタイミングとしてもよい。
【図面の簡単な説明】
【００６０】
【図１】本実施の形態における情報処理装置の構成を示す図である。
【図２】本実施の形態において動画サムネイルを表示する際の処理部の構成を示す図である。
【図３】本実施の形態の処理部におけるスレッド切り替えの様子を模式的に示す図である。
【図４】本実施の形態において２つのテクスチャバッファにおけるテクスチャデータの格納状況を説明する図である。
【図５】本実施の形態における復号化スレッドの割り当て処理時間における処理手順を示すフローチャートである。
【符号の説明】
【００６１】
２０  プロセッサユニット、  ３０  管理部、  ４０  処理部、  ４２  初期処理部、  ４３  復号化スレッド、  ４４  復号化部、  ４６  バッファ書込部、  ４７  ファイル格納部、  ４８  テクスチャバッファ、  ５０  描画部、  ５１  描画スレッド、  ５２  フレームバッファ、  ７０  メモリ、  ７５  入力装置、  ８０  記憶装置、  ９０  表示装置、  １００  情報処理装置。
【図１】
0004519082.tif 000002
【図２】
0004519082.tif 000003
【図３】
0004519082.tif 000004
【図４】
0004519082.tif 000005
【図５】
0004519082.tif 000006