以下に本発明の実施の形態を説明するが、本発明の構成要件と、発明の詳細な説明に記載の実施の形態との対応関係を例示すると、次のようになる。この記載は、本発明をサポートする実施の形態が、発明の詳細な説明に記載されていることを確認するためのものである。従って、発明の詳細な説明中には記載されているが、本発明の構成要件に対応する実施の形態として、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その構成要件に対応するものではないことを意味するものではない。逆に、実施の形態が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
本発明の第1の側面の情報処理装置(例えば、図1の再生装置)は、圧縮符号化映像データをデコードするデコード手段(例えば、図1のデコーダ22乃至デコーダ24)と、デコード手段への圧縮符号化映像データの供給を制御する供給制御手段(例えば、図1のPCIブリッジ17)と、供給制御手段およびデコード手段が実行する処理を制御する制御手段(例えば、図1のCPU20)とを備え、デコード手段は、デコード処理済のピクチャデータを保持するバンクメモリを有し、制御手段は、デコード手段によりPピクチャまたはBピクチャがデコードされるときに、バンクメモリに保持されるピクチャが参照される回数を示す第1のカウンタの値を変更することにより、バンクメモリに保持されたピクチャを開放するタイミングを制御する。
制御手段は、バンクメモリに保持されるピクチャが表示されたか否かを示す第2のカウンタ(例えば、自身参照カウンタ)の値を参照することにより、バンクメモリに保持されたピクチャを開放するタイミングを制御することができる。
デコード手段は、デコード処理が実行される処理単位(例えば、正方向再生においては、コーディングオーダで、第1のGOPの先頭の2つのBピクチャ以外の13ピクチャと、その後ろの第2のGOPの先頭のIBBの3ピクチャとの合計16ピクチャ、逆方向再生においては、第2のGOPの先頭の2つのBピクチャ以外の13ピクチャと、逆の表示順においてその前に表示される第3のGOPの先頭のIBBの3ピクチャとの合計16ピクチャ)に含まれるピクチャ数に応じた数のバンクメモリ(例えば、図2のビデオバンクメモリ82)を備えることができる。
制御手段は、制御手段に再生速度を指令する再生速度指令手段(例えば、CPU11)により指令された再生速度に基づいて、デコード手段によりデコード処理が実行される処理単位に含まれるピクチャのうち、デコード手段から出力されるピクチャを選択することができ、デコード手段は、デコード処理を実行するデコード処理実行手段(図2のデコード処理部77)と、デコード処理実行手段へのピクチャの供給を制御するピクチャ供給制御手段(例えば、図2のエレメンタリストリームアドレス決定部73)とを備えることができ、ピクチャ供給制御手段は、制御手段の制御に基づいて、処理単位に含まれるピクチャのうち、IピクチャおよびPピクチャ、並びに、デコード手段から出力されるピクチャとして選択されたBピクチャをデコード処理手段へ供給することができ、デコード処理手段は、制御手段の制御に基づいて、ピクチャ供給制御手段により供給されたそれぞれのピクチャをデコードするとともに、デコード手段から出力されるピクチャとして選択されたピクチャを出力することができる。
デコード手段は複数備えられるようにすることができ、複数のデコード手段から出力された非圧縮のデータの供給を受け、供給された非圧縮のデータを切り替えて選択的に出力する出力切り替え手段(例えば、図1のセレクタ25)を更に備えることができ、制御手段は、出力切り替え手段による処理を更に制御することができる。
第1の所定数は、IピクチャとPピクチャの合計数(例えば、5)に1を加えた数(例えば、6)であるものとすることができる。
第2の所定数は、IピクチャとPピクチャの合計数(例えば、5)に2を加えた数(例えば、7)であるものとすることができる。
本発明の第1の側面の情報処理方法、記録媒体に記録されているプログラム、または、プログラムは、デコード処理が実行される処理単位(例えば、正方向再生においては、コーディングオーダで、第1のGOPの先頭の2つのBピクチャ以外の13ピクチャと、その後ろの第2のGOPの先頭のIBBの3ピクチャとの合計16ピクチャ、逆方向再生においては、第2のGOPの先頭の2つのBピクチャ以外の13ピクチャと、逆の表示順においてその前に表示される第3のGOPの先頭のIBBの3ピクチャとの合計16ピクチャ)に含まれる複数のピクチャが参照される回数を示すカウンタ(例えば、前方向参照カウンタ、後ろ方向参照カウンタ)を設定するカウンタ設定ステップ(例えば、図12のステップS111の処理)と、処理単位に含まれる複数のピクチャのうち、IピクチャおよびPピクチャが、Bピクチャよりも先にデコードされるように、ピクチャごとのデコード処理の順番を決定するデコード順決定ステップ(例えば、図13のステップS127の処理)と、デコード順決定ステップの処理により決定されたデコード処理の順番に基づいて、処理単位に含まれるピクチャ数に応じた数のバンクメモリ(例えば、図2のビデオバンクメモリ82)を利用して、デコード処理の実行を制御するデコード制御ステップ(例えば、図20のステップS223の処理)と、PピクチャまたはBピクチャがデコード制御ステップの処理により制御されるデコード処理においてデコードされるときにカウンタの値を変更することにより、バンクメモリに保持されたピクチャを開放するタイミングを制御するメモリ開放制御ステップ(例えば、図20のステップS228、S229の処理、または、図21のステップS254またはステップS255の処理)とを含むことを特徴とする。
本発明の第2の側面の情報処理装置(例えば、図1の再生装置1)は、圧縮符号化映像データを記憶する記憶手段(例えば、図1のHDD16)と、記憶手段により記憶されている圧縮符号化映像データを読み出して出力する読み出し手段(例えば、図1のサウスブリッジ15)と、圧縮符号化映像データをデコードするデコード手段(例えば、図1のデコーダ22乃至デコーダ24)と、デコード手段への圧縮符号化映像データの供給を制御する供給制御手段(例えば、図1のPCIブリッジ17)と、供給制御手段およびデコード手段が実行する処理を制御する制御手段(例えば、図1のCPU20)と、制御手段に再生速度を指令する再生速度指令手段(例えば、図1のCPU11)とを備え、デコード手段は、デコード処理済のピクチャデータを保持するバンクメモリを有し、制御手段は、デコード手段によりピクチャまたはBピクチャがデコードされるときに第1のカウンタ(例えば、前方向参照カウンタ、後ろ方向参照カウンタ)の値を変更することにより、バンクメモリに保持されたピクチャを開放するタイミングを制御する。
本発明の第2の側面の情報処理方法、記録媒体に記録されているプログラム、または、プログラムは、記憶部に記憶された圧縮符号化映像データを読み出す読み出しステップ(例えば、図3のステップS1の処理)と、デコード処理が実行される処理単位(例えば、正方向再生においては、コーディングオーダで、第1のGOPの先頭の2つのBピクチャ以外の13ピクチャと、その後ろの第2のGOPの先頭のIBBの3ピクチャとの合計16ピクチャ、逆方向再生においては、第2のGOPの先頭の2つのBピクチャ以外の13ピクチャと、逆の表示順においてその前に表示される第3のGOPの先頭のIBBの3ピクチャとの合計16ピクチャ)に含まれる複数のピクチャが参照される回数を示すカウンタ(例えば、前方向参照カウンタ、後ろ方向参照カウンタ)に含まれる複数のピクチャが参照される回数を示すカウンタを設定するカウンタ設定ステップ(例えば、図12のステップS111の処理)と、処理単位に含まれる複数のピクチャのうち、IピクチャおよびPピクチャが、Bピクチャよりも先にデコードされるように、ピクチャごとのデコード処理の順番を決定するデコード順決定ステップ(例えば、図13のステップS127の処理)と、デコード順決定ステップの処理により決定されたデコード処理の順番に基づいて、処理単位に含まれるピクチャ数に応じた数のバンクメモリ(例えば、図2のビデオバンクメモリ82)を利用して、デコード処理の実行を制御するデコード制御ステップ(例えば、図20のステップS223の処理)と、読み出しステップの処理により読み出された圧縮符号化映像データの処理単位に含まれるピクチャのうち、PピクチャまたはBピクチャがデコード制御ステップの処理により制御されるデコード処理においてデコードされるときにカウンタの値を変更することにより、バンクメモリに保持されたピクチャを開放するタイミングを制御するメモリ開放制御ステップ(例えば、図20のステップS228、S229の処理、または、図21のステップS254またはステップS255の処理)とを含む。
以下、図を参照して、本発明の実施の形態について説明する。
図1は本発明を適用した再生装置1のハードウェア構成を示すブロック図である。
CPU(Central Processing Unit)11は、ノースブリッジ12に接続され、例えば、HDD(Hard disk Drive)16に記憶されているデータの読み出しなどの処理を制御したり、CPU20が実行するデコードのスケジューリング、デコードおよび表示出力の制御などの処理の開始、変更、または終了を指令するためのコマンドを生成し、出力する。ノースブリッジ12は、PCIバス(Peripheral Component Interconnect/Interface)14に接続され、例えば、CPU11の制御に基づいて、サウスブリッジ15を介して、HDD16に記憶されているデータの供給を受けて、PCIバス14、PCIブリッジ17を介して、メモリ18に供給する。また、ノースブリッジ12は、メモリ13とも接続されており、CPU11の処理に必要なデータを授受する。
メモリ13は、CPU11が実行する処理に必要なデータを保存することが可能な、例えば、DDR(Double Data Rate)等の高速アクセス可能な記憶用のメモリである。サウスブリッジ15は、HDD16のデータの書き込みおよび読み出しを制御する。HDD16には、圧縮符号化されたストリームデータが記憶されている。
PCIブリッジ17は、コマンドバッファ31およびリザルトバッファ32を内部に備えるとともに、CPU11の制御に基づいてHDD16から読み出されたストリームデータをバッファリングするメモリ18が接続されている。PCIブリッジ17は、CPU11の制御に基づいてHDD16から読み出されたストリームデータを、メモリ18に供給して保存させることができるとともに、CPU20の制御に基づいて、メモリ18に保存されているストリームデータを読み出して、デコーダ22乃至デコーダ24に供給する。また、PCIブリッジ17は、PCIバス14またはコントロールバス19を介したコマンドまたはリザルトに対応する制御信号の授受を制御する。
コマンドバッファ31は、CPU11から、ノースブリッジ12およびPCIバス14を介してコマンドの書き込みを受けるとともに、CPU20から、コントロールバス19を介して、書き込まれているコマンドが読み出されるようになされている。また、リザルトバッファ32は、コントロールバス19を介して、CPU20によりコマンドに対するリザルトの書き込みを受けるとともに、CPU11から、ノースブリッジ12およびPCIバス14を介して、書き込まれているリザルトが読み取られるようになされている。
メモリ18は、PCIブリッジ17の制御に基づいて、HDD16により読み出された、圧縮符号化されたストリームデータを記憶するものであり、例えば、SDRAM(Synchronous Dynamic Random Access Memory)等で構成されている。
CPU20は、コントロールバス19を介して、CPU11によりPCIブリッジ17のコマンドバッファ31に書き込まれたコマンドを読み取り、このコマンドにしたがって、PCIブリッジ17、デコーダ22乃至デコーダ24、および、セレクタ25が実行する処理を制御する。メモリ21は、CPU20の処理に必要なデータを記憶する。
デコーダ22乃至デコーダ24は、CPU20の制御に基づいて、供給された圧縮符号化されたストリームデータをデコードし、非圧縮の映像信号を出力する。デコーダ22は、その内部にメモリ41を、デコーダ23は、その内部にメモリ42を、デコーダ24は、その内部にメモリ43を有し、必要に応じて、供給された圧縮符号化されたストリームデータ、または、デコードされた非圧縮の映像信号を保持することが可能なようになされている。また、デコーダ22乃至デコーダ24は、再生装置1に含まれない独立した装置として設けられていても良い。
セレクタ25は、CPU20による設定に基づいて、デコーダ22乃至デコーダ24により出力された非圧縮のSDI(Serial Digital Interface)データの出力をフレーム精度で切り替えることができる。
なお、図1の再生装置1は、1つの装置として構成されていても良いし、複数の装置によって構成されるようにしても良い。例えば、図1の再生装置のうち、CPU11、ノースブリッジ12、メモリ13、サウスブリッジ15、および、HDD16の部分が、パーソナルコンピュータの構成のうちの一部であるとし、PCIカード、PCI−Expressカードなどの拡張カード、または、拡張ボードに、PCIバス14、PCIブリッジ17、メモリ18、コントロールバス19、CPU20、メモリ21、デコーダ22乃至デコーダ24、および、セレクタ25の機能を備えさせ、パーソナルコンピュータに拡張カードを装着して再生装置1として機能するようにしても良い。また、これらを、さらに複数の装置に分割して、再生装置1を構成するようにしても良い。
次に、再生装置1の動作について説明する。
HDD16には、MPEGのLong GOP方式で圧縮された圧縮映像のデータが記憶されている。
CPU11は、ノースブリッジ12を介して、サウスブリッジ15を制御して、図示しない操作入力部から供給されたユーザの操作入力を基に、HDD16から、圧縮符号化されたストリームデータを読み出させ、ノースブリッジ12、PCIバス14、および、PCIブリッジ17を介して、メモリ18に供給させて記憶させるとともに、再生スピード(再生方向を示す情報を含む)を示す情報、デコード開始コマンド、または、表示開始コマンドなどを、ノースブリッジ12およびPCIバス14を介して、PCIブリッジ17のコマンドバッファ31に書き込む。
CPU20は、PCIブリッジ17のコマンドバッファ31に書き込まれたCPU11からのコマンドを基に、圧縮符号化されたストリームデータのデコードおよび表示のスケジュールを決定する。具体的には、CPU20は、デコードに利用されるデコーダ22乃至デコーダ24の選択、圧縮符号化されたストリームデータのデコーダ22乃至デコーダ24への入力のタイミング、フレームごとのデコードのタイミング、デコード時のバンクメモリの割り当て、および、デコードされたピクチャの出力、すなわち、表示のタイミングを決定する。
そして、CPU20は、PCIブリッジ17を制御して、メモリ18に記憶されている圧縮符号化されたストリームデータを、決定されたスケジュールに基づいて、デコーダ22乃至デコーダ24のうちのいずれか対応するものに供給させる。
CPU20は、デコーダ22乃至デコーダ24を制御して、供給された圧縮符号化されたデータをデコードさせる。デコーダ22乃至デコーダ24は、供給された圧縮符号化されたストリームデータをデコードして、非圧縮のSDIデータを生成して、セレクタ25に出力する。
そして、CPU20は、セレクタ25を制御して、デコーダ22乃至デコーダ24より出力された非圧縮のSDIデータの出力を切り替えさせる。
図2は、デコーダ22乃至デコーダ24の更に詳細な構成を示すブロック図である。
入力処理部71は、PCIブリッジ17から供給された圧縮符号化されたストリームデータをメモリコントローラ74に供給して入力バッファ75に保存させるとともに、供給されたストリームデータから、ピクチャ単位で、先頭番地、データサイズ、ピクチャヘッダ情報、Qマトリクスなどを取得して、アドレス管理テーブル72に供給する。
アドレス管理テーブル72は、入力処理部71から供給された、ピクチャ単位の先頭番地、データサイズ、ピクチャヘッダ情報、Qマトリクスなどの情報を、テーブルIDにより区別可能なテーブル情報として、それぞれ、ピクチャ別に保持する。
エレメンタリストリームアドレス決定部73は、CPU20からコントロールバス19を介して供給される制御信号を基に、入力バッファ75に保存されたストリームデータを、ピクチャ単位でデコード処理部77に供給させることができるように、アドレス管理テーブル72に保持されている所定のテーブルIDで示されるテーブル情報から、対応するピクチャの先頭番地およびピクチャサイズ情報を読み出して、メモリコントローラ74に供給する。
メモリコントローラ74は、入力バッファ75へのストリームデータの書き込みおよび読み出しを制御する。すなわち、メモリコントローラ74は、入力処理部71から供給されたストリームデータを入力バッファ75に書き込むとともに、エレメンタリストリームアドレス決定部73から供給される、対応するピクチャの先頭番地およびピクチャサイズ情報を基に、所定のピクチャを読み出して、デコード処理部77に供給する。
入力バッファ75は、SDRAMなどの記憶用のメモリで構成された図1のメモリ41乃至メモリ43の記録領域のうちの一部に相当し、メモリコントローラ74の制御に基づいて、ストリームデータを保存する。
コントロールバス76は、コントロールバス19を介してCPU20から供給される制御信号を、エレメンタリストリームアドレス決定部73、デコード処理部77、書き込み画アドレス決定部78、参照画アドレス決定部79、および、出力アドレス決定部80に供給するとともに、デコーダ22乃至デコーダ24の内部において実行される処理に関する情報を、コントロールバス19を介して、CPU20に供給する。
デコード処理部77は、メモリコントローラ74により入力バッファ75から読み出されたMPEGビデオストリームを、参照画アドレス決定部79から供給された参照画を必要に応じて参照してデコードし、デコードされたベースバンド(非圧縮)の映像信号を、書き込み画アドレス決定部78に供給する。
書き込み画アドレス決定部78は、コントロールバス19を介してCPU20から供給される制御信号を、コントロールバス76を介して取得し、この制御信号に基づいて、デコード処理部77によりデコードされて供給されたベースバンドの映像信号のビデオバンクメモリ82における記録位置、すなわち、保存されるバンク位置を決定し、ベースバンドの映像信号を、メモリコントローラ81を介して、ビデオバンクメモリ82の所定のバンク位置に保存させる。
参照画アドレス決定部79は、コントロールバス19を介してCPU20から供給される制御信号を、コントロールバス76を介して取得し、この制御信号に基づいて、ビデオバンクメモリ82のうち、Pピクチャの前方向(forward)の参照画像として保持されているフレーム画像データや、Bピクチャの前方向および後ろ方向(backward)の参照画像として保持されているフレーム画像データを、メモリコントローラ81を制御して読み出させ、デコード処理部77に供給する。
出力アドレス決定部80は、コントロールバス19を介してCPU20から供給される制御信号を、コントロールバス76を介して取得し、この制御信号に基づいて、ビデオバンクメモリ82に保持されているフレーム画像データのうちの出力画像、すなわち、表示させるフレームのバンクを指定して、メモリコントローラ81を制御して読み出させ、出力する。
メモリコントローラ81は、ビデオバンクメモリ82へのフレーム画像の書き込みおよび読み出しを制御する。ビデオバンクメモリ82は、SDRAMなどの記憶用のメモリで構成された図1のメモリ41乃至メモリ43の記録領域のうちの一部に相当する、8バンク(8面)のフレーム画像用のバンクメモリであり、メモリコントローラ81の制御に基づいて、1フレームのフレーム画像データを設定されたバンクに保持する。
次に、図3のフローチャートを参照して、CPU11が実行する制御処理について説明する。
ステップS1において、CPU11は、ノースブリッジ12およびサウスブリッジ15を制御して、ユーザによりデコードして出力するストリームデータとして指定された、圧縮符号化されたストリームデータのうちの複数GOPをHDD16から読み出す。
ステップS2において、CPU11は、読み出した複数GOPのストリームデータを、PCIバス14を介してPCIブリッジ17に供給し、メモリ18に転送する。
ステップS3において、CPU11は、ノースブリッジ12およびPCIバス14を介して、PCIブリッジ17のコマンドバッファ31に、データ転送完了と、メモリ18に転送されたGOPに含まれるピクチャのピクチャ情報を供給することにより、CPU20に対して、データ転送完了と、ピクチャ情報とを通知する。ピクチャ情報には、例えば、ピクチャタイプ、ピクチャ単位のヘッダ情報、ピクチャサイズなどの情報が含まれる。
ステップS4において、CPU11は、CPU20およびメモリ18から、準備完了の通知を受ける。具体的には、CPU11は、CPU20がコントロールバス19を介してPCIブリッジ17のリザルトバッファ32に供給した、データ転送完了とピクチャ情報の通知に対するリザルトを、ノースブリッジ12およびPCIバス14を介して読み込むとともに、メモリ18から、PCIブリッジ17、PCIバス14およびノースブリッジ12を介して、複数GOPのストリームデータの保存終了の通知を受ける。
ステップS5において、CPU11は、図示しない操作入力部から、ユーザによる再生出力処理の開始の指令を受け、ノースブリッジ12およびPCIバス14を介して、PCIブリッジ17のコマンドバッファ31に、デコード開始コマンドを送信し、デコーダ22乃至デコーダ24により、デコード処理を開始させる。デコード開始コマンドには、表示スピード情報が含まれる。
ステップS6において、CPU11は、ノースブリッジ12およびPCIバス14を介して、PCIブリッジ17のコマンドバッファ31に、表示開始コマンドを送信する。ステップS7において、CPU11は、デコーダによりデコードされて得られたSDI信号、すなわち、ベースバンドの画像信号の、1GOP分の表示を開始させる。
ステップS8において、CPU11は、CPU20がコントロールバス19を介してPCIブリッジ17のリザルトバッファ32に供給した表示開始コマンドに対するリザルト、すなわち、後述する図19のステップS194において、CPU20がPCIブリッジ17のリザルトバッファ32に書き込んだフレームごとの表示完了の通知を、ノースブリッジ12およびPCIバス14を介して読み込んで、いずれのピクチャの表示が終了したかを常にチェックしておくことにより、1GOPの表示完了を検出する。
ステップS9において、CPU11は、表示されたGOPは、表示されるストリームデータの最後であるか否かを判断する。ステップS9において、表示されたGOPは、表示されるストリームデータの最後であると判断された場合、処理は終了される。
ステップS9において、表示されたGOPは、表示されるストリームデータの最後ではないと判断された場合、ステップS10において、CPU11は、図示しない操作入力部から供給される信号を基に、例えば、ストリームデータの再生終了、再生されているストリームデータの変更、もしくは、再生速度または方向の変更指令など、入力ストリーム状態の変更を伴う指令がユーザから入力されたか否かを判断する。
ステップS10において、入力ストリーム状態の変更を伴う指令がユーザから入力されたと判断された場合、ステップS11において、CPU11は、ノースブリッジ12およびPCIバス14を介して、PCIブリッジ17のコマンドバッファ31に、ユーザの操作入力に対応するコマンドを送信する。
ステップS10において、入力ストリーム状態の変更を伴う指令がユーザから入力されていないと判断された場合、または、ステップS11の処理の終了後、ステップS12において、CPU11は、HDD16に、表示させるストリームデータが残っているか否かを判断する。ステップS12において、HDD16に、表示させるストリームデータが残っていないと判断された場合、処理は、ステップS7に戻り、メモリ18に転送され、まだ表示されていないストリームデータにおいて、ステップS7以降の処理が繰り返される。
ステップS12において、HDD16に、表示させるストリームデータが残っていると判断された場合、ステップS13において、CPU11は、ノースブリッジ12およびサウスブリッジ15を制御して、デコードして出力するストリームデータのうち、メモリ18へ転送済みのGOPに続く1GOPをHDD16から読み出す。
ステップS14において、CPU11は、読み出した1GOPのストリームデータを、PCIバス14を介してPCIブリッジ17に供給し、メモリ18に転送する。すなわち、メモリ18には、再生されるストリームデータの終了部分付近が保持されている場合を除いて、基本的には、所定数のGOPが保持されているようになされている。
ステップS15において、CPU11は、ノースブリッジ12およびPCIバス14を介して、PCIブリッジ17のコマンドバッファ31に、データ転送完了と、メモリ18に転送されたGOPに含まれるピクチャのピクチャ情報を供給することにより、CPU20に対して、データ転送完了と、ピクチャ情報とを通知する。ピクチャ情報には、例えば、ピクチャタイプ、ピクチャ単位のサイズなどの情報が含まれる。
ステップS16において、CPU11は、CPU20およびメモリ18から、準備完了の通知を受ける。具体的には、CPU11は、CPU20がコントロールバス19を介してPCIブリッジのリザルトバッファ32に供給した、データ転送完了とピクチャ情報の通知に対するリザルトを、ノースブリッジ12およびPCIバス14を介して読み込むとともに、メモリ18から、PCIブリッジ17、PCIバス14およびノースブリッジ12を介して、複数GOPのストリームデータの保存終了の通知を受ける。
ステップS16の処理の終了後、処理は、ステップS7に進み、それ以降の処理が繰り返される。
このような処理により、CPU11は、CPU20にコマンドを供給し、供給したコマンドに対するリザルトを受けて、ストリームデータのデコードと、デコードされたデータの表示を制御することができる。
ここでは、デコードされたデータを1GOPずつ表示させる場合について説明したが、デコードされて生成されたSDI信号を外部に出力する場合にも、同様の処理を実行することにより、CPU11は、CPU20にコマンドを供給し、供給したコマンドに対するリザルトを受けて、ストリームデータのデコードと、デコードされたデータの外部への出力を制御することができることは言うまでもない。
そして、CPU20は、CPU11から供給されるコマンドに基づいて、複数のデコーダ(図1においては、デコーダ22乃至デコーダ24)によるデコード処理を制御する。具体的には、CPU20は、デコードに利用されるデコーダ22乃至デコーダ24の選択、換言すれば、圧縮符号化されたストリームデータの供給先を、デコーダ22乃至デコーダ24のうちのいずれにするのかを選択する処理を実行する。更に、CPU20は、圧縮符号化されたストリームデータのデコーダ22乃至デコーダ24のうち対応するものへの入力のタイミング、ピクチャごとのデコードのタイミング、デコード時のバンクメモリの割り当て、および、デコードされたピクチャの出力、すなわち、表示のタイミングを決定し、これらのタイミングを基に、PCIブリッジ17、デコーダ22乃至デコーダ24、および、セレクタ25を制御する。以下、図4乃至図34を参照して、CPU20によるデコードおよび表示出力の制御について説明する。
CPU20は、デコーダ22乃至デコーダ24によるデコード処理と、セレクタ25により出力されるSDI信号のセレクト処理とを制御するために、メモリ21に、各種情報を保持可能な複数のレジスタおよび情報キューを有するようになされている。情報キューは、FIFO(First In First Out)のキュー(queue)構造で、CPU11により供給されたコマンドや、ピクチャタイプ情報が対応付けられたピクチャIDおよびピクチャIDに付随する情報(例えば、時間情報や、他のフレームのデコード、または、自分自身によって参照される数を計数するためのカウンタ)などを、デコードタイミングのスケジューリングや、デコードおよび表示の制御の用途ごとに、それぞれ所定の深さで蓄積することができるようになされている。
CPU20は、対応する情報キューに蓄積された情報を用いて、デコードおよび表示のタイミングを制御する。すなわち、メモリ21にピクチャがキューされるのではなく、CPU20の制御に基づいて、ピクチャIDがそれぞれの情報キューに設定されることにより、CPU20は、デコードおよび表示のタイミングを制御するための演算処理を実行することができる。
各種情報を蓄積する情報キューとして、例えば、コントロールバス19を介して、PCIブリッジ17のコマンドバッファ31から取得したコマンドを蓄積するコマンドキューをはじめとして、処理待ち行列に対応する入力ピクチャのピクチャIDがコーディングオーダで蓄積される入力ピクチャキュー、入力ピクチャキューに蓄積されたピクチャIDをリオーダしてディスプレイオーダに並べ替えて蓄積する表示順情報キュー、表示順情報キューに蓄積されたピクチャIDから、IピクチャおよびPピクチャを抽出してデコード順に並べ替えて蓄積するI/Pピクチャデコードキュー、I/Pピクチャデコードキューに設定されたピクチャIDに加えて、これらのピクチャIDに対応する時間情報が更に蓄積される時間情報付きI/Pピクチャデコードキュー、表示順情報キューに蓄積されたピクチャIDから、表示されるBピクチャを抽出してデコード順に並べ替えて蓄積するBピクチャデコードキュー、Bピクチャデコードキューに設定されたピクチャIDに加えて、これらのピクチャIDに対応する時間情報が更に蓄積される時間情報付きBピクチャデコードキュー、表示順にピクチャIDが設定される表示順設定キュー、表示順設定キューに設定されたピクチャIDに加えて、これらのピクチャIDに対応する時間情報が更に蓄積される時間情報付き表示順設定キューなどが、CPU20による各種制御に用いられている。各キューに蓄積される情報、各キューの深さ、その情報を用いて実行される処理の詳細については、それぞれ後述する。
次に、図4のフローチャートを参照して、1フレームごとに行う処理について説明する。この処理ルーチンは、表示が指令されたストリームデータが終了するまで、または、表示の終了が指令されるまで、1フレームごとに繰り返して実行される。
ステップS31において、図5を用いて後述する入力ストリーム状態変更処理が実行される。入力ストリーム状態変更処理は、CPU11から新たなコマンドが発行されているか否かを確認する処理である。
ステップS32において、図6を用いて後述するデコードスケジュール処理が実行される。デコードスケジュール処理において、デコードタイミングがスケジュールされる。
ステップS33において、図19を用いて後述するフレーム制御処理が実行される。フレーム制御処理において、処理対象となっているフレームがデコードされる。
ステップS34において、CPU20は、すべてのフレームの処理が終了したか否かを判断する。ステップS34において、すべてのフレームの処理が終了していないと判断された場合、ステップS35において、CPU20は、1フレームを単位とする時間カウンタをインクリメントする。
ステップS35の処理の終了後、処理は、ステップS31に戻り、それ以降の処理が繰り返される。ステップS34において、すべてのフレームの処理が終了したと判断された場合、処理は終了される。
このようにして、CPU20は、1フレームの処理ごとに、時間カウンタをカウントアップし、ユーザの指令した再生速度に応じて、デコードをスケジュールして、1フレームごとに、デコードを行わせ、表示を設定することができる。
次に、図5のフローチャートを参照して、図4のステップS31において実行される、入力ストリーム状態変更処理について説明する。
ステップS51において、CPU20は、PCIブリッジ17のコマンドバッファ31から取得したコマンドを蓄積するコマンドキューをチェックする。
ステップS52において、CPU20は、コマンドキューに、例えば、再生速度(再生方向を含む)の変更、または、再生終了の指令など、入力ストリーム状態を変更させる新たなコマンドが保存されているか否かを判断する。
ステップS52において、コマンドキューに新たなコマンドが保存されていると判断された場合、ステップS53において、CPU20は、コマンドキューに最も早い時刻に保存されたコマンドに基づいて、再生速度および再生方向の設定に基づいたストリーム入力状態を変更する。ステップS52において、コマンドキューに新たなコマンドが保存されていないと判断された場合、または、ステップS53の処理の終了後、処理は、図4のステップS31に戻り、ステップS32に進む。
このような処理により、PCIブリッジ17のコマンドバッファ31から取得したコマンドを蓄積するコマンドキューに最も早い時刻に保存されたコマンドが参照され、そのコマンドに基づいて、ストリームの入力状態が変更される。
次に、図6のフローチャートを参照して、図5のステップS32において実行される、デコードスケジュール処理について説明する。
ステップS71において、CPU20は、入力ピクチャキューを参照して、入力ピクチャキューが空であるか否かを判断する。入力ピクチャキューは、後述する入力処理(ステップS72)において設定される情報キューであり、デコードのスケジュールが次に決定される入力ピクチャと、そのスケジューリングに必要なピクチャのピクチャIDが設定される。
再生装置1が取り扱うストリームデータが、図7に示されるように、1GOPが15ピクチャで構成されているMPEGのLONG GOPのストリームデータである場合、1GOP相当の15ピクチャごとにデコード処理を行うデコーダ22乃至デコーダ24のそれぞれには、それぞれのGOPにおいて、表示順で先頭となる2つのBピクチャを除いた13ピクチャと、正方向の再生の場合は、その前のGOPにおいて、表示順で先頭となるIBBの3ピクチャ、逆方向の場合は、その後ろのGOPにおいて、表示順で先頭となるIBBの3ピクチャとの16ピクチャが供給される。
図8を用いて、デコーダ22乃至デコーダ24のそれぞれが担当するデコードの単位について説明する。図8では、デコーダ22乃至デコーダ24に供給されるピクチャの並びを、ディスプレイオーダで示している。再生装置1においては、1GOP相当(15ピクチャ)ごとに、デコード処理がデコーダ22乃至デコーダ24のうちの1つのデコーダにおいてそれぞれ実行されるが、上述したように、デコーダ22乃至デコーダ24のそれぞれには、1GOPにおいて表示順で先頭となる2つのBピクチャを除いた13ピクチャと、その前またはその後ろのGOPにおいて表示順で先頭から3つのピクチャとの16ピクチャが供給される。したがって、再生方向が正方向の場合は、図8Aに示されるように、デコーダ22乃至デコーダ24のうちの第1のデコーダに、第1GOPの先頭の2つのBピクチャを除いた13ピクチャと第2のGOPの先頭の3ピクチャが供給され、第2のデコーダに、第2GOPの先頭の2つのBピクチャを除いた13ピクチャと第3GOPの先頭の3ピクチャが供給され、同様にして、第3のデコーダに、第3GOPの先頭の2つのBピクチャを除いた13ピクチャと第4GOPの先頭の3ピクチャが供給される。また、再生方向が逆方向の場合は、図8Bに示されるように、デコーダ22乃至デコーダ24のうちの第1のデコーダに、第2GOPの先頭の2つのBピクチャを除いた13ピクチャと第3のGOPの先頭の3ピクチャが供給され、第2のデコーダに、第1GOPの先頭の2つのBピクチャを除いた13ピクチャと第2GOPの先頭の3ピクチャが供給される。
そして、入力ピクチャキューには、デコーダ22乃至デコーダ24に入力されるピクチャのうち、デコードタイミングのスケジュール待ちである入力ピクチャと、そのスケジューリングに必要なピクチャとのピクチャIDが設定される。すなわち、入力ピクチャキューには、LONG GOPのストリームデータのうち、1GOPの15ピクチャと、その前またはその後ろのGOPの先頭のIBBの3ピクチャとの18ピクチャのピクチャIDが保持される。
図9Aに、正方向の再生のために、MPEGのLONG GOPのストリームデータのうち、第1のGOPの15ピクチャと、その後ろの第2のGOPの先頭のIBBの3ピクチャのピクチャIDが入力ピクチャキューに設定されている状態を示し、図9Bに、逆方向の再生のために、MPEGのLONG GOPのストリームデータのうち、第2のGOPの15ピクチャと、逆の表示順においてその前に表示される第3のGOPの先頭のIBBの3ピクチャのピクチャIDが入力ピクチャキューに設定されている状態を示す。
ステップS71において、入力ピクチャキューが空ではないと判断された場合、処理は、図4のステップS32に戻り、ステップS33に進む。すなわち、デコードのスケジュール処理は、LONG GOPの15ピクチャとは2ピクチャ分ずれた位置から設定される13ピクチャと次の3つのピクチャとの16ピクチャ分の処理単位ごとにまとめて実行される。
ステップS71において、入力ピクチャキューが空であると判断された場合、ステップS72において、図11のフローチャートを用いて後述する入力処理が実行される。
ステップS73において、CPU20は、次のデータを供給するデコーダを示すレジスタの値を基に、次にデータの供給を受けるデコーダに対応して設定される時間情報付き表示順設定キューが空であるか否かを判断する。時間情報付き表示順設定キューとは、後述するステップS77の時間情報付きスケジュール決定処理において設定されるキューであり、複数のデコーダのそれぞれ(図1を用いて説明した場合においては、デコーダ22乃至デコーダ24の3つのデコーダのそれぞれ)に対応して設定される。時間情報付き表示順設定キューの詳細については、図18のフローチャートを参照して後述する。
ステップS73において、次にデータの供給を受けるデコーダに対応する時間情報付き表示順設定キューが空ではないと判断された場合、すなわち、スケジュール済みの1GOP相当のピクチャに対して、フレームごとにデコード処理または表示処理が実行されている途中である場合、処理は、図4のステップS32に戻り、ステップS33に進む。
ステップS73において、次にデータの供給を受けるデコーダに対応する時間情報付き表示順設定キューが空であると判断された場合、ステップS74において、CPU20は、リオーダ処理を実行する。リオーダ処理とは、入力ピクチャキューに設定されているコーディングオーダに並べられている18ピクチャに対応するピクチャIDを、ディスプレイオーダに入れ替えて表示順情報キューに設定する処理である。
したがって、再生方向が正方向である場合、表示順情報キューには、図10Aに示されるように、図9Aを用いて説明した入力ピクチャキューに設定されているピクチャIDが、ディスプレイオーダに並べ替えられて設定され、再生方向が逆方向である場合、表示順情報キューには、図10Bに示されるように、図9Bを用いて説明した入力ピクチャキューに設定されているピクチャIDが、ディスプレイオーダに並べ替えられて設定される。
ステップS74において、リオーダ処理が実行されて、表示順情報キューにピクチャIDがセットされたとき、入力ピクチャキューにキューされているピクチャIDはすべて出力され、入力ピクチャキューは空となる。すなわち、上述したステップS71において、入力ピクチャキューが空であると判断される場合とは、入力ピクチャキューにキューされたピクチャIDに対するリオーダ処理が実行された場合であり、入力ピクチャキューが空ではないと判断される場合とは、この処理以前に実行されたデコードスケジュール処理のステップS72において入力処理が実行された後、次にデータの供給を受けるデコーダに対応する時間情報付き表示順設定キューが空ではないため、ステップS74においてリオーダ処理が実行されていない場合である。
ステップS75において、図12および図13を用いて後述するデコード設定処理が実行される。デコード設定処理は、各ピクチャの参照カウンタを設定し、表示速度設定に基づいて、表示されるピクチャを選択し、IピクチャおよびPピクチャ、並びに、表示されるBピクチャのデコードの順番を設定する処理である。
ステップS76において、図17のフローチャートを用いて後述する表示位相決定処理が実行される。表示位相決定処理は、1GOP相当の15フレーム+1フレームの処理単位におけるデコードの開始と表示の開始のタイミングのずれを決定する処理である。
ステップS77において、図18のフローチャートを用いて後述する時間情報付きスケジュール決定処理が実行される。時間情報付きスケジュール決定処理は、フレームごとのデコードのタイミングを制御するために、デコードのスケジューリングを実行して、所定の情報キューに、ピクチャIDに対応付けて時間情報を設定する処理である。
ステップS76およびステップS77の処理によって、デコードと表示のタイミングがスケジュールされる。具体的には、先にIピクチャおよびPピクチャがデコードされた後、Bピクチャがデコードされ、再生方向が正方向で通常速度の再生である場合など、表示の先頭がIピクチャまたはPピクチャである場合、表示開始のタイミングが、デコード開始から6ピクチャ分ずれるように、また、再生の方向が逆方向の場合、換言すれば、スピード設定が負の値である場合など、表示の先頭がBピクチャである場合、表示開始のタイミングが、デコード開始から7ピクチャ分ずれることにより、Bピクチャのデコードのタイミングと表示のタイミングが、1フレーム分ずれるように、デコードと表示のタイミングのスケジュールが行われる。
ステップS78において、CPU20は、次にデコードされるデータを供給するデコーダの設定を切り替える処理を実行する。具体的には、CPU20は、次のデータを供給するデコーダを示すレジスタの値がデコーダの数(図1を用いて説明した再生装置1においては、デコーダ22乃至デコーダ24の3つ)より1少ない値(図1を用いて説明した再生装置1においては、2)と等しい場合、レジスタの値を0とし、レジスタの値が、デコーダの数より2以上少ない場合、レジスタの値を1インクリメントする。ステップS78の処理の終了後、処理は、図4のステップS32に戻り、ステップS33に進む。
このような処理により、デコードと表示のタイミングがスケジュールされる。
次に、図11のフローチャートを参照して、図6のステップS72において実行される、入力処理について説明する。
ステップS101において、CPU20は、図3を用いて説明した制御処理のステップS5においてCPU11がコマンドバッファ31に送信したデコード開始コマンドに含まれている表示スピード情報、または、図3を用いて説明した制御処理のステップS11においてCPU11がコマンドバッファ31に送信したユーザの操作入力に対応するコマンドから、スピード設定値を取得し、メモリ21に保持する。スピード設定値が正の値であるとき、再生処理は正方向再生であり、負の値であるとき、再生処理は、逆方向再生であるものとすることができる。
例えば、スピード設定値が1であるとき、通常再生であるものとし、スピード設定値が1以上の値であるとき、高速再生であるものとし、スピード設定値が1未満の正の値であるとき、低速再生であるものとし、スピード設定値が−1であるとき、通常速度の逆方向再生であるものとし、スピード設定値が−1以下の値であるとき、高速の逆方向再生であるものとし、スピード設定値が絶対値1未満の負の値であるとき、低速の逆方向再生であるものとすることができる。
ステップS102において、CPU20は、ステップS101において取得したスピード設定値が正の値であるか負の値であるかを基に、実行される処理は正方向の再生処理であるか否かを判断する。
ステップS102において、正方向の再生処理であると判断された場合、ステップS103において、CPU20は、次にデコードする15フレームのうちの先頭から13フレームを含む1GOPと、その次のGOPのI,B,BピクチャのピクチャIDを、図9Aを用いて説明した入力ピクチャキューに設定する。
ステップS102において、正方向の再生処理ではない、すなわち、逆方向の再生処理であると判断された場合、ステップS104において、CPU20は、次にデコードする15フレームのうちの後ろから13フレームを含む1GOPと、その前のGOPのI,B,BピクチャのピクチャIDを、図9Bを用いて説明した入力ピクチャキューに設定する。
ステップS103またはステップS104の処理の終了後、ステップS105において、CPU20は、PCIブリッジ17を制御して、入力ピクチャキューの設定、および、次のデータを供給するデコーダを示すレジスタの値(再生されるストリームの最初のGOPにおいては、初期設定によって定められる値であり、2番目以降のGOPにおいては、図6のステップS78の処理により定められる値である)に基づいて、メモリ18に保存されているストリームデータのうち、図8を用いて説明した16フレームの圧縮画像データの、デコーダ22乃至デコーダ24のうちの所定のデコーダへの転送を制御する。
デコーダ22乃至デコーダ24の入力処理部71は、供給された16フレームのデータをメモリコントローラ74に供給して、入力バッファ75に保存させるとともに、アドレス管理テーブル72に、ピクチャ単位の先頭番地、データサイズ、ピクチャヘッダ情報、Qマトリクスなどの情報を供給し、それぞれ、ピクチャ別に、テーブルIDにより区別可能なテーブル情報として保持させる。
ステップS106において、CPU20は、コントロールバス19を介して、PCIブリッジ17のリザルトバッファ32に、デコーダ22乃至デコーダ24のうちの所定のデコーダへの1GOP相当のストリームの転送処理の終了を示すリザルトを供給することにより、CPU11に対してストリームの転送処理の終了を通知し、処理は、図6のステップS72に戻り、ステップS73に進む。
このような処理により、デコーダ22乃至デコーダ24に、図8を用いて説明したデコード処理単位となる16フレームのデータが供給される。
次に、図12および図13のフローチャートを参照して、図6のステップS75において実行される、デコード設定処理について説明する。
ステップS111において、CPU20は、表示順情報キューに設定されているピクチャIDを基に、参照カウンタのポインタを設定する。参照カウンタには、自身参照カウンタ、前方向参照カウンタ、および、後ろ方向参照カウンタがあり、それぞれのカウンタは、ディスプレイオーダでのピクチャの順番に対応して設定される。参照カウンタのポインタは、例えば、表示順情報キューに、B(0),B(1),I(2),B(3),B(4),P(5),B(6),B(7),P(8),B(9),B(10),P(11),B(12),B(13),P(14),B(15)B(16),I(17)のようにピクチャIDが格納されている場合、B(3)に対応付けられて、自身参照ポインタとして自分自身のディスプレイオーダ順を示すポインタ3が、前方向参照ポインタとして、前方向の参照画像であるI(2)のディスプレイオーダ順を示すポインタ2が、後ろ方向参照ポインタとして、後ろ方向参照画像であるP(5)のディスプレイオーダ順を示すポインタ5が、それぞれ設定される。
ステップS112において、CPU20は、処理対象のフレームは、スピード設定が変更された後の最初のGOPの最初のフレームであるか否かを判断する。
ステップS112において、スピード設定が変更された後の最初のGOPの最初のフレームであると判断された場合、ステップS113において、CPU20は、スピード設定値を基に、間引き周期を決定して、レジスタに保存する。
具体的には、CPU20は、例えば、2倍速または−2倍速で再生が行われる場合、間引き周期を1/2としてレジスタに保存し、3倍速または−3倍速で再生が行われる場合、間引き周期を1/3としてレジスタに保存する。
ステップS114において、CPU20は、デコード処理単位にかかわらずフレームの数をカウントするフレームカウンタをリセットする。
ステップS112において、スピード設定が変更された後の最初のGOPの最初のフレームではないと判断された場合、または、ステップS114の処理の終了後、ステップS115において、CPU20は、表示順情報キューに情報が残っているか否かを判断する。
ステップS115において、表示順情報キューに情報が残っていないと判断された場合、処理は、図6のステップS75に戻り、ステップS76に進む。ステップS115において、表示順情報キューに情報が残っていると判断された場合、ステップS116において、CPU20は、表示順情報キューの先頭の情報は、後述する表示順設定キューにおいて設定される所定の15フレーム、すなわち、表示順情報キューに、B(0),B(1),I(2),B(3),B(4),P(5),B(6),B(7),P(8),B(9),B(10),P(11),B(12),B(13),P(14),B(15)B(16),I(17)のようにピクチャIDが格納されている場合、そのうちの、I(2),B(3),B(4),P(5),B(6),B(7),P(8),B(9),B(10),P(11),B(12),B(13),P(14),B(15)B(16)の15フレームに含まれるか否かを判断する。
ステップS116において、所定の15フレームに含まれていると判断された場合、ステップS117において、CPU20は、フレームカウンタを1インクリメントする。
ステップS116において、所定の15フレームに含まれていないと判断された場合、ステップS118において、CPU20は、表示順情報キューの先頭のピクチャIDに対応するピクチャが、後述する処理においてデコードの設定がなされないピクチャである場合、具体的には、表示順情報キューに、B(0),B(1),I(2),B(3),B(4),P(5),B(6),B(7),P(8),B(9),B(10),P(11),B(12),B(13),P(14),B(15)B(16),I(17)のようにピクチャIDが格納されている場合、そのうちの、先頭のB(0),B(1)のいずれかである場合、このピクチャIDを、表示順情報キューから削除する。
ステップS117またはステップS118の処理の終了後、ステップS119において、CPU20は、ステップS113においてレジスタに保持された間引き周期と、フレームカウンタの値を参照し、処理対象のフレームは、表示されるか否かを判断する。具体的には、CPU20は、間引き周期が1/2である場合、フレーム数をカウントするフレームカウンタの値が2n(nは正の整数)であれば、表示を行い、それ以外の場合は、表示を行わないようにしたり、間引き周期が1/3である場合、フレーム数をカウントするフレームカウンタの値が3n(nは正の整数)であれば、表示を行い、それ以外の場合は、表示を行わないようにする。ステップS119において、表示が行われないと判断された場合、すなわち、間引かれるフレームであると判断された場合、処理は、後述するステップS124に進む。
ステップS119において、表示が行われると判断された場合、すなわち、間引かれないフレームであると判断された場合、ステップS120において、CPU20は、自身参照カウンタに1を加算する。すなわち、自身参照カウンタのポインタにおいて示される自分自身の表示順に対応する自身参照カウンタに1を加算する。
ステップS121において、CPU20は、表示順設定キューに、表示されると判断された対応するピクチャIDを設定する。
ステップS122において、CPU20は、ステップS121において表示順設定キューに設定されたピクチャIDは、Bピクチャに対応するものであるか否かを判断する。
ステップS122において、Bピクチャであると判断された場合、ステップS123において、CPU20は、参照カウンタのポインタを基に、対象となる前方向および後ろ方向の参照カウンタに1を加算する。具体的には、処理対象のフレームが、B(3)である場合、上述したように、B(3)に対応付けられて、前方向参照ポインタとして、ポインタ2が、後ろ方向参照ポインタとして、ポインタ5が設定されているので、CPU20は、I(2)の前方向の参照カウンタと、P(5)の後ろ方向参照カウンタに、1を加算する。
ステップS119において、表示が行われないと判断された場合、すなわち、間引かれるフレームであると判断された場合、または、ステップS122において、Bピクチャではないと判断された場合、ステップS124において、CPU20は、処理対象のフレームのピクチャIDは、Pピクチャに対応するピクチャIDであるか否かを判断する。
ステップS124において、Pピクチャであると判断された場合、ステップS125において、CPU20は、参照カウンタのポインタを基に、対象となる前方向参照カウンタに1を加算する。具体的には、処理対象のフレームが、P(5)である場合、P(5)に対応付けられて、前方向参照ポインタとして、ポインタ2が設定されているので、CPU20は、I(2)の前方向の参照カウンタに、1を加算する。
ステップS124において、Pピクチャではないと判断された場合、ステップS126において、CPU20は、処理対象のフレームのピクチャIDは、Iピクチャに対応するピクチャIDであるか否かを判断する。
ステップS123、または、ステップS125の処理の終了後、もしくは、ステップS126において、Iピクチャであると判断された場合、ステップS127において、CPU20は、対応するピクチャIDを、いずれかのデコードキューに設定し、表示順情報キューから削除する。すなわち、CPU20は、表示されるBピクチャに対応するピクチャIDをBピクチャデコードキューに、表示されるか否かにかかわらず、IピクチャまたはBピクチャに対応するピクチャIDを、I/Pピクチャデコードキューに、それぞれ設定し、処理は、ステップS115に戻り、それ以降の処理が繰り返される。
I/Pピクチャデコードキューとは、Bピクチャに先行してデコードされるIピクチャおよびPピクチャのピクチャIDがデコード順に設定されるキューである。Bピクチャデコードキューとは、表示される、すなわち、間引かれないBピクチャのピクチャIDがデコード順に設定されるキューである。
ステップS126において、Iピクチャではないと判断された場合、ステップS128において、CPU20は、表示順情報キューから対応するBピクチャ、すなわち、表示されないBピクチャのピクチャIDを削除し、処理は、ステップS115に戻り、それ以降の処理が繰り返される。
このような処理により、参照カウンタが設定されて、再生速度に応じて間引きが行われ、表示順設定キュー、I/Pピクチャデコードキュー、および、Bピクチャデコードキューが設定される。
図14に、通常速度、すなわち、間引きが行われない場合の正方向再生および逆方向再生における表示順設定キューを示す。正方向再生の場合の表示順設定キューには、図14Aに示されるように、図10Aを用いて説明した表示順情報キューにキューされている18個のピクチャIDのうち、先頭の2つのBピクチャと、最後のIピクチャを除いた15個のピクチャID、すなわち、図8Aを用いて説明した正方向再生の場合にデコーダ22乃至デコーダ24のうちのいずれかに供給されるピクチャのうち、最後のIピクチャを除いた15ピクチャのピクチャIDが、表示される順番に設定される。
そして、逆方向再生の場合の表示順設定キューには、図14Bに示されるように、図10Bを用いて説明した表示順情報キューにキューされている18個のピクチャIDのうち、先頭の2つのBピクチャと、最後のIピクチャを除いた15個のピクチャID、すなわち、図8Bを用いて説明した逆方向再生の場合にデコーダ22乃至デコーダ24のうちのいずれかに供給されるピクチャのうち、最後のIピクチャを除いた15ピクチャのピクチャIDが、実際に表示される順番に設定される。
正方向または逆方向の高速再生が実行される場合、間引き周期とフレームカウンタとを基に、表示されないと判断されたピクチャのピクチャIDは、図14に示される表示順設定キューには設定されない。すなわち、正方向または逆方向の高速再生が実行される場合、表示順設定キューには、15以下の数のピクチャIDが設定される。
図15に、正方向再生および逆方向再生におけるI/Pピクチャデコードキューを示す。正方向再生の場合のI/Pピクチャデコードキューには、図15Aに示されるように、図10Aを用いて説明した表示順情報キューに設定されているピクチャIDのうち、IピクチャおよびPピクチャに対応する6つのピクチャのピクチャIDが設定され、逆方向再生の場合のI/Pピクチャデコードキューには、図15Bに示されるように、図10Bを用いて説明した表示順情報キューに設定されているピクチャIDのうち、IピクチャおよびPピクチャに対応する6つのピクチャのピクチャIDが設定される。
図16に、通常速度、すなわち、間引きが行われない場合の正方向再生および逆方向再生におけるBピクチャデコードキューを示す。正方向再生の場合のBピクチャデコードキューには、図16Aに示されるように、図10Aを用いて説明した表示順情報キューに設定されているピクチャIDのうち、表示されるBピクチャに対応する10個のピクチャのピクチャIDが設定され、逆方向再生の場合のBピクチャデコードキューには、図16Bに示されるように、図10Bを用いて説明した表示順情報キューに設定されているピクチャIDのうち、表示されるBピクチャに対応する10個のピクチャのピクチャIDが設定される。
正方向または逆方向の高速再生が実行される場合、間引き周期とフレームカウンタとを基に、表示されないと判断されたピクチャのピクチャIDは、図15に示されるBピクチャデコードキューには設定されない。すなわち、正方向または逆方向の高速再生が実行される場合、Bピクチャデコードキューには、10以下の数のピクチャIDが設定される。
この処理を実行することにより、デコードされるBピクチャは、表示されるもののみとなり、間引かれるBピクチャは、デコード処理部77に供給されない。また、間引かれるIピクチャまたはPピクチャは、デコードはされるが、表示されないようになされる。
また、フレームカウンタは、スピード設定が変更されるまで、すなわち、入力ストリーム状態が変更されるまで、GOPにかかわらず、リセットされずに連続してインクリメントされるので、例えば、1GOPが15フレームで構成されている場合の2倍速、4倍速、または、−2倍速、−4倍速など、間引き周期の分母が1GOPを構成するフレームの数を割り切ることができない値となってしまうため、GOPによって、表示されないピクチャの位置が変更される場合であっても、入力ストリームにおけるフレームの順番を示すフレームカウンタの値を用いて、間引き周期を基に、表示が行われるか否かを容易に決定することができる。
このようにして、Bピクチャはデコーダへのストリーム入力で間引き、IピクチャおよびPピクチャはデコード後の表示を止めることで、等間隔で間引きが施され、スピードの動的な変更に追従可能なように高速再生を行うことが可能となる。IピクチャおよびPピクチャは、デコード時に他のピクチャからの参照画像として用いられる場合があるので、この方法は、できるだけバンクメモリの面数を少なくして等間隔で間引きを施して高速再生を実行するために、有効な方法である。
次に、図17のフローチャートを参照して、図6のステップS76において実行される、デコード開始タイミングに対して表示開始タイミングをディレイさせる位相を設定するための、表示位相決定処理について説明する。
ステップS131において、CPU20は、図14を用いて説明した表示順設定キューに設定されている、表示するピクチャの数の情報を、表示ピクチャ数レジスタに保持する。図14においては、表示順設定キューに15ピクチャ分のピクチャIDが設定されているので、表示ピクチャ数レジスタには、値15が保存される。
ステップS132において、CPU20は、図15を用いて説明したI/Pピクチャデコードキューに保持されている、デコードされるIピクチャおよびPピクチャの総数を、I/Pピクチャ数レジスタに保持する。図15においては、I/Pピクチャデコードキューに、6ピクチャ分のピクチャIDが設定されているので、I/Pピクチャ数レジスタには、値6が保存される。
ステップS133において、CPU20は、表示順設定キューの先頭に設定されているピクチャIDに対応するピクチャのピクチャタイプはBピクチャであるか否かを判断する。これは、通常速度再生または逆方向の通常速度再生における位相のずれ量を算出している場合、再生方向は正方向か逆方向かを判断しているのと同義である。なお、高速再生において、間引きが実行された後では、表示順設定キューの先頭に設定されているピクチャIDに対応するピクチャのピクチャタイプがBピクチャであっても、その再生速度の設定値によっては、再生方向が正方向であることもあり、逆方向であることもある。
ステップS133において、表示順設定キューの先頭に設定されているピクチャIDに対応するピクチャのピクチャタイプはBピクチャであると判断された場合、ステップS134において、CPU20は、デコードされるIピクチャおよびPピクチャの総数に1を加えた数を、I/Pピクチャデコードキューに保持されているピクチャIDに対応するIピクチャおよびPピクチャのデコード開始タイミングに対する、表示順設定キューに保持されるピクチャIDに対応するピクチャの表示開始タイミングの時間的な位相のずれ量disp_phaseとする。
例えば、再生速度が−1倍である場合、表示順設定キューの先頭に設定されているピクチャIDに対応するピクチャのピクチャタイプはBピクチャであるので、先にIピクチャおよびPピクチャがデコードされた後、表示開始のタイミングが、デコード開始から7ピクチャ分ずらされて、Bピクチャのデコードのタイミングと表示のタイミングが1フレーム分ずれるように、Bピクチャがデコードされる。
ステップS133において、表示順設定キューの先頭に設定されているピクチャIDに対応するピクチャのピクチャタイプはBピクチャではないと判断された場合、ステップS135において、CPU20は、デコードされるIピクチャおよびPピクチャの総数を、I/Pピクチャデコードキューに保持されているピクチャIDに対応するIピクチャおよびPピクチャのデコードタイミングに対する、表示順設定キューに保持されるピクチャIDに対応するピクチャの表示開始タイミングの時間的な位相のずれ量disp_phaseとする。
例えば、再生速度が1倍である場合、表示順設定キューの先頭に設定されているピクチャIDに対応するピクチャのピクチャタイプはIピクチャであり、Bピクチャではないので、先にIピクチャおよびPピクチャがデコードされた後、表示開始のタイミングが、デコード開始から6ピクチャ分ずらされて、Bピクチャのデコードのタイミングと表示のタイミングが1フレーム分ずれるように、Bピクチャがデコードされる。
ステップS134またはステップS135の処理の終了後、ステップS136において、CPU20は、ステップS134またはステップS135において決定された表示の位相のずれ量disp_phaseを、内部のレジスタに記憶する。
ステップS137において、CPU20は、処理中のGOPは、表示開始GOP(再生スピードが変更されたときの、対応するスピードでの再生開始部分を含む)であるか否かを判断する。
ステップS137において、処理中のGOPは表示開始GOPではないと判断された場合、ステップS138において、CPU20は、ステップS134またはステップS135において決定された表示位相のずれ量disp_phaseから、前回の処理、すなわち、1つ前に表示されるGOPにおける表示位相のずれ量prev_disp_phaseを減算し、その結果をずれ量補正値disp_zeroとして内部のレジスタに記憶するとともに、ステップS134またはステップS135において決定された表示位相のずれ量disp_phaseを1つ前に表示されるGOPにおける表示位相のずれ量prev_disp_phaseに代入して、処理は、図6のステップS76に戻り、ステップS77に進む。
ステップS137において、処理中のGOPは表示開始GOPであると判断された場合、ステップS139において、CPU20は、ずれ量補正値disp_zeroとして、初期値0を設定して内部のレジスタに記憶し、処理は、図6のステップS76に戻り、ステップS77に進む。
このような処理により、デコード開始タイミングに対して表示開始タイミングをディレイさせる位相が決定される。
次に、図18のフローチャートを参照して、図6のステップS77において実行される、時間情報付きスケジュール決定処理について説明する。
ステップS161において、CPU20は、デコーダ22乃至デコーダ24のうちのいずれかのデコーダにおいてデコードされるデコード処理単位の16枚のピクチャにおいて、先頭のフレームがデコードされるタイミングを示すデコード開始時刻情報time_baseの値を、1つ前のデコード処理単位のデコード開始時刻情報であるprev_time_base、および、表示位相のずれ量補正値を示すdisp_zeroを用いて算出する(式(1))。
デコード開始時刻情報time_base=前GOPのデコード開始時刻情報prev_time_base−表示位相のずれ量補正値disp_zero
・・・(1)
なお、表示開始GOPに対して、式(1)の演算処理が実行される場合、前GOPのデコード開始時刻情報を示すprev_time_baseは、0として演算される。
ステップS162において、CPU20は、次にデータが供給されるデコーダに対応する時間情報付きI/Pピクチャデコードキューを設定する。
時間情報付きI/Pピクチャデコードキューは、図15を用いて説明したI/Pピクチャデコードキューに設定されているピクチャIDに対応付けて、先頭にデコードされるピクチャのデコード開始時刻time_baseの情報、および、1フレームを単位とする時間カウンタのカウント値が設定されるものであり、再生装置1に備えられているデコーダごと(ここでは、デコーダ22乃至デコーダ24のそれぞれ)に対応して設けられている。
具体的には、CPU20は、次のデータを供給するデコーダを示すレジスタの値を参照し、次にデータが供給されるデコーダに対応する時間情報付きI/Pピクチャデコードキューを設定する。CPU20は、I/PピクチャデコードキューにキューされているピクチャIDのうち、先頭のピクチャIDに対応するフレームがデコードされるタイミングを示す情報として、上述したデコード開始時刻情報time_baseの情報を用いるとともに、各ピクチャIDに対応するそれぞれのフレームがデコードされるタイミングを示す情報としては、1フレームを単位とする時間カウンタのカウント値を用いる。
ステップS162において、時間情報付きI/Pピクチャデコードキューが設定されたとき、I/PピクチャデコードキューにキューされているピクチャIDはすべて出力されて、I/Pピクチャデコードキューは空となる。
ステップS163において、CPU20は、次にデータが供給されるデコーダに対応する時間情報付きBピクチャデコードキューを設定する。
時間情報付きBピクチャデコードキューは、図16を用いて説明したBピクチャデコードキューに設定されているピクチャIDに対応付けて、先頭にデコードされるピクチャのデコード開始時刻time_baseの情報、IピクチャおよびPピクチャの数、および、1フレームを単位とする時間カウンタのカウント値を用いて求められる時間情報が設定されるものであり、再生装置1に備えられているデコーダごと(ここでは、デコーダ22乃至デコーダ24のそれぞれ)に対応して設けられている。
具体的には、CPU20は、次のデータを供給するデコーダを示すレジスタの値を参照し、次にデータが供給されるデコーダに対応する時間情報付きBピクチャデコードキューを設定する。CPU20は、BピクチャデコードキューにキューされているピクチャIDのうち、先頭のピクチャIDに対応するフレームがデコードされるタイミングを示す情報として、上述したデコード開始時刻情報time_baseの情報にIピクチャおよびPピクチャの数を加えた値を用いるとともに、各ピクチャIDに対応するそれぞれのフレームがデコードされるタイミングを示す情報としては、1フレームを単位とする時間カウンタのカウント値を用いる。
ステップS163において、時間情報付きBピクチャデコードキューが設定されたとき、BピクチャデコードキューにキューされているピクチャIDはすべて出力されて、Bピクチャデコードキューは空となる。
ステップS164において、CPU20は、次にデータが供給されるデコーダに対応する時間情報付き表示順設定キューを設定する。
時間情報付き表示順設定キューは、図14を用いて説明した表示順設定キューに設定されているピクチャIDに対応付けて、先頭に表示されるピクチャのデコード開始時刻に対する表示タイミングの位相のずれ量から1を減算した値、および、1フレームを単位とする時間カウンタのカウント値が設定されるものであり、再生装置1に備えられているデコーダごと(ここでは、デコーダ22乃至デコーダ24のそれぞれ)に対応して設けられている。
具体的には、CPU20は、次のデータを供給するデコーダを示すレジスタの値を参照し、次にデータが供給されるデコーダに対応する時間情報付き表示順設定キューを設定する。CPU20は、表示順設定キューにキューされているピクチャIDのうち、実際の表示順において先頭となるフレームに対応するフレームの表示タイミングを示す、上述した表示位相決定処理において決定された位相のずれ量disp_phaseから1を減算した値を基準時刻情報として用いるとともに、各ピクチャIDに対応するそれぞれのフレームがデコードされるタイミングを示す情報としては、1フレームを単位とする時間カウンタのカウント値を用いる。
ステップS164において時間情報付き表示順設定キューが設定されたとき、表示順設定キューにキューされているピクチャIDはすべて出力されて、表示順設定キューは空となる。
ステップS165において、CPU20は、デコード開始時刻情報time_baseに、上述した図17のステップS131において表示ピクチャ数レジスタに保持された値を加えた値を、前のGOPのデコード開始時刻情報prev_time_baseとして、レジスタに保存し、処理は、図6のステップS77に戻り、ステップS78に進む。
このような処理により、デコードの処理単位となる16フレーム分のデコード処理タイミングが設定される。
図17および図18を用いて説明した処理により、デコードの位相と表示の位相が、IピクチャおよびPピクチャの枚数、表示する枚数、先頭に表示するピクチャがBピクチャであるか否かなどを基に決定されて、時間情報として設定される。これにより、複数のデコーダを用いて正逆方向の高速再生を行うときに発生する、それぞれのデコーダにおいてデコードされたり出力されて表示されるピクチャの枚数の変化に追従して、動的にスピードを変更して、連続的にデコード済みの画像を表示させることが可能となる。更に、再生スピードの変更が指令されて、任意の位置のピクチャから間引き間隔の変更が行われた場合でも、表示する数の増減を反映することで、対応しているスピード範囲において、再生スピードをフレーム単位で変更させて、連続的にスピードを変更させることが可能となる。
図6乃至図18を用いて説明した処理により、図4のステップS32においてデコードスケジュール処理が実行される。
次に、図19のフローチャートを参照して、図4のステップS33において実行される、フレーム制御処理について説明する。
ステップS191において、CPU20は、再生装置1内で実行される各処理のタイミングを管理するためのカウンタである時間管理カウンタと、時間情報付きI/Pピクチャデコードキューを参照し、表示時刻が過ぎてしまったストリームデータがあるか否かを判断する。ステップS191において、表示時刻が過ぎてしまったストリームデータがあると判断された場合、処理は、後述するステップS196に進む。
ステップS191において、表示時刻が過ぎてしまったストリームデータがないと判断された場合、ステップS192において、図20を用いて後述するデコード処理が実行される。
ステップS193において、図21を用いて後述する表示処理が実行される。
ステップS194において、CPU20は、CPU11に、表示ピクチャ情報を通知する。具体的には、CPU20は、コントロールバス19を介して、PCIブリッジ17のリザルトバッファ32に、図3のステップS6において、CPU11から送信された表示開始コマンドに対するリザルトとして表示ピクチャ情報を書き込むことにより、CPU11に対して、表示ピクチャ情報を通知する。CPU11は、PCIブリッジ17のリザルトバッファ32に書き込まれる表示ピクチャ情報を参照することにより、表示されるピクチャがいずれのGOPのいずれのピクチャであるかを知ることができる。
ステップS195において、CPU20は、時間管理カウンタをインクリメントし、処理は、図4のステップS33に戻り、ステップS34に進む。
ステップS191において、表示時刻が過ぎてしまったストリームデータがあると判断された場合、ステップS196において、図32を用いて後述するアンダーフロー処理が実行されて、処理は、図4のステップS33に戻り、ステップS34に進む。
このような処理により、表示が遅れていなければ、設定されたデコードスケジュールに基づいて、1フレーム分のデコードが実行されて、表示ピクチャ情報が、CPU11に通知され、間引き処理が実行される。そして、表示が遅れているとき、後述するアンダーフロー処理が実行される。
次に、図20のフローチャートを参照して、図19のステップS192において実行されるデコード処理について説明する。
ステップS221において、CPU20は、時間管理カウンタの値と、時間情報付きI/Pピクチャデコードキューまたは時間情報付きBピクチャデコードキューに設定された、次にデコードされるピクチャのピクチャIDに対応付けられている時間情報とが一致したか否かを判断する。ステップS221において、時間管理カウンタの値は、時間情報付きI/Pピクチャデコードキューまたは時間情報付きBピクチャデコードキューに設定された時間情報と一致していないと判断された場合、処理は、図19のステップS192に戻り、ステップS193に進む。
ステップS221において、時間管理カウンタの値と、時間情報付きI/Pピクチャデコードキューまたは時間情報付きBピクチャデコードキューに設定された時間情報とが一致したと判断された場合、ステップS222において、CPU20は、デコードを実行するデコーダとして設定されているデコーダ22乃至デコーダ24のうちのいずれかのビデオバンクメモリ82のうちの空きバンクを示す情報を、コントロールバス19を介して、デコーダ22乃至デコーダ24のうちの対応するものから取得する。
ステップS223において、CPU20は、デコードを実行するデコーダとして設定されているデコーダ22乃至デコーダ24のうちのいずれかを、コントロールバス19を介して制御し、Iピクチャ、Pピクチャ、または、Bピクチャのうちの、時間情報が一致したピクチャをデコードさせ、時間情報付きI/Pピクチャデコードキューまたは時間情報付きBピクチャデコードキューから、デコードコマンドが実行されたピクチャに対応するピクチャIDを削除する。
具体的には、CPU20は、次のデータを供給するデコーダを示すレジスタに保持されている値を参照し、デコーダ22乃至デコーダ24のうちデコードを実行するデコーダとして設定されているもののエレメンタリストリームアドレス決定部73を制御して、時間情報付きI/Pピクチャデコードキューまたは時間情報付きBピクチャデコードキューに設定されたピクチャIDのうちの、時間情報が一致したピクチャIDに対応するピクチャのデータを、メモリコントローラ74により、入力バッファ75から読み出させて、デコード処理部77に供給させる。
デコードされるピクチャがIピクチャである場合、CPU20は、デコード処理部77を制御して、メモリコントローラ74から供給されたIピクチャをデコードさせるとともに、書き込み画アドレス決定部78を制御して、デコードされたフレームデータをメモリコントローラ81に供給させて、ステップS222において取得された空きバンクを示す情報を基に、ビデオバンクメモリ82の空きバンクのうち、もっとも早い時間に空きバンクとなったバンクに、デコードされたIピクチャを保存させる。また、デコードされるピクチャがPピクチャである場合、CPU20は、参照画アドレス決定部79を制御して、メモリコントローラ81により、ビデオバンクメモリ82に格納されている前方向の参照画を読み出させて、デコード処理部77に供給させ、デコード処理部77を制御して、メモリコントローラ74から供給されたPピクチャをデコードさせるとともに、書き込み画アドレス決定部78を制御して、デコードされたフレームデータをメモリコントローラ81に供給させて、ステップS222において取得された空きバンクを示す情報を基に、ビデオバンクメモリ82の空きバンクのうち、もっとも早い時間に空きバンクとなったバンクに、デコードされたPピクチャを保存させる。
CPU20は、書き込み画アドレス決定部78から、コントロールバス76およびコントロールバス19を介して、デコードされたIピクチャおよびPピクチャが格納されたバンク位置に関する情報の供給を受けるので、Pピクチャのデコード時に、前方向の参照画のバンク位置を指定することにより、参照画アドレス決定部79を制御して、メモリコントローラ81により、ビデオバンクメモリ82に格納されている前方向の参照画を読み出させて、デコード処理部77に供給させることができる。
そして、デコードされるピクチャがBピクチャである場合、CPU20は、参照画アドレス決定部79を制御して、メモリコントローラ81により、ビデオバンクメモリ82に格納されている前方向および後ろ方向の参照画を読み出させて、デコード処理部77に供給させ、デコード処理部77を制御して、メモリコントローラ74から供給されたBピクチャをデコードさせるとともに、書き込み画アドレス決定部78を制御して、デコードされたフレームデータをメモリコントローラ81に供給させて、ステップS222において取得された空きバンクを示す情報を基に、ビデオバンクメモリ82の空きバンクのうち、もっとも早い時間に空きバンクとなったバンクに、デコードされたBピクチャを保存させる。
CPU20は、書き込み画アドレス決定部78から、コントロールバス76およびコントロールバス19を介して、デコードされたIピクチャおよびPピクチャが格納されたバンク位置に関する情報の供給を受けるので、Bピクチャのデコード時においても、前方向および後ろ方向の参照画のそれぞれのバンク位置を指定することにより、参照画アドレス決定部79を制御して、メモリコントローラ81により、ビデオバンクメモリ82に格納されている前方向の参照画を読み出させて、デコード処理部77に供給させることができる。
ステップS224において、CPU20は、ステップS223のデコード開始コマンドによってデコードされたのは、Bピクチャであったか否かを判断する。
ステップS224において、デコードされたのは、Bピクチャであったと判断された場合、ステップS225において、CPU20は、参照カウンタのポインタを基に、対象となる前方向および後ろ方向の参照カウンタから1を減算する。
例えば、デコードされたピクチャが、B(3)であった場合、B(3)に対応付けられて、前方向参照ポインタとして、ポインタ2が、後ろ方向参照ポインタとして、ポインタ5が設定されているので、CPU20は、I(2)の前方向の参照カウンタと、P(5)の後ろ方向参照カウンタから1減算する。
ステップS224において、デコードされたのは、Bピクチャではなかったと判断された場合、ステップS226において、CPU20は、ステップS223のデコード開始コマンドによってデコードされたのは、Pピクチャであったか否かを判断する。
ステップS226において、デコードされたのは、Pピクチャであったと判断された場合、ステップS227において、CPU20は、参照カウンタのポインタを基に、対象となる前方向の参照カウンタから1を減算する。
例えば、デコードされたピクチャが、P(5)であった場合、P(5)に対応付けられて、前方向参照ポインタとして、ポインタ2が設定されているので、CPU20は、I(2)の前方向の参照カウンタから1を減算する。
ステップS225またはステップS227の処理の終了後、ステップS228において、CPU20は、いずれかのピクチャIDに対応する参照カウンタの値がすべて0となったか否かを判断する。
ステップS228において、参照カウンタの値がすべて0となったピクチャIDがあると判断された場合、ステップS229において、CPU20は、参照カウンタの値がすべて0となったピクチャIDに対応するバンクを解放する。
ステップS226において、デコードされたのは、Pピクチャではなかった、すなわち、Iピクチャであったと判断された場合、ステップS228において、参照カウンタの値がすべて0となったピクチャIDはないと判断された場合、または、ステップS229の処理の終了後、処理は、図19のステップS192に戻り、ステップS193に進む。
このような処理により、設定されたスケジュールに基づいて、Iピクチャ、Pピクチャ、および、Bピクチャがデコードされ、前方向または後ろ方向の参照カウンタのうちの対応するカウンタの値が1減算され、すべての参照カウンタの値が0になったものがある場合、すなわち、自分自身の表示も他のピクチャからの参照も終了したピクチャがある場合、そのピクチャが保持されているバンクが解放される。
次に、図21のフローチャートを参照して、図19のステップS193において実行される表示処理について説明する。
ステップS251において、CPU20は、時間管理カウンタの設定と、時間情報付き表示順設定キューに設定された現在の先頭のピクチャIDに対応する時間情報が一致したか否かを判断する。時間情報付き表示順設定キューに設定された時間情報とは、スケジュール時の15フレームのうち、実際の表示順において先頭となるフレームに対応するフレームの表示タイミングを示す、上述した表示位相決定処理において決定された位相のずれ量disp_phaseから1を減算した値、または、15フレームのうち、実際の表示順において先頭となるフレーム以外の各ピクチャIDに対応する、1フレームを単位とする時間カウンタのカウント値である。
ステップS251において、時間管理カウンタの設定は、時間情報付き表示順設定キューに設定された時間情報と一致すると判断された場合、ステップS252において、CPU20は、時間情報と一致すると判断されたピクチャIDに対応するピクチャの表示命令を、デコーダ22デコーダ24のうちの、設定されているデコーダに、コントロールバス19を介して通知する。このとき、デコーダ22乃至デコーダ24のうちの、設定されているデコーダの出力アドレス決定部80は、コントロールバス76を介して、CPU20からの制御信号を受け、メモリコントローラ80を制御して、ビデオバンクメモリ82から、対応するピクチャを読み出させて、セレクタ25に供給する。
そして、CPU20は、図6のステップS78において設定される次のデータを供給するデコーダを示すレジスタに保持されている値を基に、セレクタ25を制御して、デコード済みのフレームの出力を制御する。
ステップS253において、CPU20は、表示されたピクチャのピクチャIDに対応する自身参照カウンタの値を1減算する。
そして、時間情報付き表示順設定キューに設定されていた現在の先頭のピクチャIDは、デコーダに表示命令が出され、自身参照カウンタの値が1減算されることにより、時間情報付き表示順設定キューから出力され、表示キューに設定されたピクチャIDに対応するピクチャの次に表示されるピクチャに対応するピクチャIDが、時間情報付き表示順設定キューの先頭となるか、または、時間情報付き表示設定キューが空となる。
ステップS254において、CPU20は、いずれかのピクチャIDに対応する参照カウンタの値がすべて0となったか否かを判断する。
ステップS254において、参照カウンタの値がすべて0となったピクチャIDがあると判断された場合、ステップS255において、CPU20は、参照カウンタの値がすべて0となったピクチャIDに対応するバンクを解放する。
ステップS251において、時間管理カウンタの設定は、時間情報付き表示順設定キューに設定された時間情報と一致しないと判断された場合、ステップS254において、参照カウンタの値がすべて0となったピクチャIDはないと判断された場合、または、ステップS255の処理の終了後、処理は、図19のステップS193に戻り、ステップS194に進む。
このようにして、時間情報付き表示順設定キューに設定されている時間情報を基に、デコードされたデータが表示され、自身参照カウンタの値が1減算されて、すべての参照カウンタの値が0になったものがある場合、すなわち、自分自身の表示も他のピクチャからの参照も終了したピクチャがある場合、そのピクチャが保持されているバンクが解放される。
正方向または逆方向の高速再生処理において、間引きが実行された場合の時間情報付き表示順設定キューの設定について、図22乃至図27を用いて説明する。図22乃至図27においては、上部に、間引き前のスケジューリングの状態が、間引きされるフレームを点線で記載することによって示されており、その下部に、間引き処理後のスケジューリングの状態が示されている。また、図22乃至図27において、カッコ内の数字の0,1,2は、デコーダ22乃至デコーダ24のうちのいずれかに対応してそれぞれ設定されている情報キューに蓄積される情報、または、デコーダ22乃至デコーダ24のうちのいずれかにおいてそれぞれ実行される処理であることを示すものである。
例えば、+2倍速の高速再生における場合、図22に示されるように、1つ目のGOPのIピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がIピクチャであることからIピクチャのデコード開始タイミングより6フレーム分遅れる。そして、次のGOPのIピクチャのデコード開始タイミングは、上述した式(1)により、前のGOPの表示ピクチャ数8と、表示位相のずれ量補正値disp_zeroが1となることから、7フレームであると求められ、IピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がBピクチャであることからIピクチャのデコード開始タイミングより7フレーム分遅れる。
また、例えば、−2倍速の高速再生における場合、図23に示されるように、1つ目のGOPのIピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がBピクチャであることからIピクチャのデコード開始タイミングより7フレーム分遅れる。そして、次のGOPのIピクチャのデコード開始タイミングは、上述した式(1)により、前のGOPの表示ピクチャ数8と、表示位相のずれ量補正値disp_zeroが0となることから、8フレームであると求められ、IピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がBピクチャであることからIピクチャのデコード開始タイミングより7フレーム分遅れる。
例えば、+4倍速の高速再生における場合、図24に示されるように、1つ目のGOPのIピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がIピクチャであることからIピクチャのデコード開始タイミングより6フレーム分遅れる。そして、次のGOPのIピクチャのデコード開始タイミングは、上述した式(1)により、前のGOPの表示ピクチャ数4と、表示位相のずれ量補正値disp_zeroが1となることから、3フレームであると求められ、IピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がBピクチャであることからIピクチャのデコード開始タイミングより7フレーム分遅れる。
例えば、−4倍速の高速再生における場合、図25に示されるように、1つ目のGOPのIピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がBピクチャであることからIピクチャのデコード開始タイミングより7フレーム分遅れる。そして、次のGOPのIピクチャのデコード開始タイミングは、上述した式(1)により、前のGOPの表示ピクチャ数4と、表示位相のずれ量補正値disp_zeroが0となることから、4フレームであると求められ、IピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がBピクチャであることからIピクチャのデコード開始タイミングより7フレーム分遅れる。
例えば、+5倍速の高速再生における場合、図26に示されるように、1つ目のGOPのIピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がIピクチャであることからIピクチャのデコード開始タイミングより6フレーム分遅れる。そして、次のGOPのIピクチャのデコード開始タイミングは、上述した式(1)により、前のGOPの表示ピクチャ数3と、表示位相のずれ量補正値disp_zeroが0となることから、3フレームであると求められ、IピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がIピクチャであることからIピクチャのデコード開始タイミングより6フレーム分遅れる。
例えば、−5倍速の高速再生における場合、図27に示されるように、1つ目のGOPのIピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がBピクチャであることからIピクチャのデコード開始タイミングより7フレーム分遅れる。そして、次のGOPのIピクチャのデコード開始タイミングは、上述した式(1)により、前のGOPの表示ピクチャ数3と、表示位相のずれ量補正値disp_zeroが0となることから、3フレームであると求められ、IピクチャとBピクチャとのデコードの開始タイミングは、6フレーム分遅れ、表示開始タイミングは、先頭がBピクチャであることからIピクチャのデコード開始タイミングより7フレーム分遅れる。
次に、図28乃至図31を用いて、図2のビデオバンクメモリ82の設定について説明する。
図28は、1倍速再生時に各ピクチャが図2のビデオバンクメモリ82の8つのバンクに格納される状態を表す図である。
まず、バンクNo.0乃至5は、デコード済みのIピクチャおよびPピクチャが、デコード順に格納されるようになされている。そして、最初のI2ピクチャの表示タイミングと同時に、バンクNo.6にB3ピクチャが格納され、B3ピクチャが表示されるタイミングと同時に、バンクNo.7にB4ピクチャが格納され、B4ピクチャが表示されるタイミングには、表示が終了されたB3ピクチャが格納されていたバンクNo.6と、参照画像としての利用が終了したI2ピクチャが格納されていたバンクNo.0とが開放され、バンクNo.0には、B6ピクチャが格納される。その後、IピクチャまたはPピクチャが格納されているバンクは、そのピクチャの参照画像としての利用とピクチャの表示とがいずれも終了した時点で開放される。Bピクチャは、開放された時間が早いバンクから、順次格納され、Bピクチャが格納されているバンクは、そのピクチャの表示後に開放される。すなわち、自身参照カウンタ、前方向参照カウンタ、および、後ろ方向参照カウンタのすべての値が0となったピクチャが格納されていたバンクが順次解放され、Bピクチャは、開放された時間が早いバンクから、順次格納され、表示後に開放される。
図29は、2倍速再生時に各ピクチャが図2のビデオバンクメモリ82の8つのバンクに格納される状態を表す図である。
まず、バンクNo.0乃至5は、デコード済みのIピクチャおよびPピクチャが、デコード順に格納されるようになされている。そして、最初のI2ピクチャの表示タイミングと同時に、バンクNo.6にB4ピクチャが格納され、B4ピクチャが表示されるタイミングと同時に、バンクNo.7にB6ピクチャが格納され、参照画像としての利用が終了され、表示も終了したI2ピクチャが格納されていたバンクNo.0が開放される。B6ピクチャが表示されるタイミングには、表示が終了されたB4ピクチャが格納されていたバンクNo.6と、参照画像としての利用が終了したP5ピクチャが格納されていたバンクNo.2とが解放される。その後、IピクチャまたはPピクチャが格納されているバンクは、そのピクチャの参照画像としての利用と、表示されるピクチャはピクチャの表示とが、いずれも終了した時点で開放される。間引きされないBピクチャは、開放された時間が早いバンクから、順次格納され、表示後に開放される。すなわち、自身参照カウンタ、前方向参照カウンタ、および、後ろ方向参照カウンタのすべての値が0となったピクチャが格納されていたバンクが順次解放され、Bピクチャは、開放された時間が早いバンクから、順次格納され、表示後に開放される。
図30は、−1倍速再生時に各ピクチャが図2のビデオバンクメモリ82の8つのバンクに格納される状態を表す図である。
バンクNO.0乃至5は、デコード済みのIピクチャおよびPピクチャが、デコード順に格納されるようになされている。そして、バンクNo.5にI2ピクチャが格納された次のタイミングで、バンクNo.6にB1ピクチャが格納され、B1ピクチャが表示されるタイミングと同時に、バンクNo.7にB0ピクチャが格納され、B0ピクチャが表示されるタイミングには、表示が終了されたB1ピクチャが格納されていたバンクNo.6が開放される。その後、IピクチャまたはPピクチャが格納されているバンクは、そのピクチャの参照画像としての利用とピクチャの表示とが、いずれも終了した時点で開放され、Bピクチャは、開放された時間が早いバンクから、順次格納され、そのBピクチャの表示後に、対応するバンクは開放される。すなわち、自身参照カウンタ、前方向参照カウンタ、および、後ろ方向参照カウンタのすべての値が0となったピクチャが格納されていたバンクが順次解放される。すなわち、図30における場合は、逆方向再生であるので、最初にバンクNo.0に格納されたI2ピクチャは、最後に表示されるため、このGOPの表示が終了するまで開放されない。
図31は、−2倍速再生時に各ピクチャが図2のビデオバンクメモリ82の8つのバンクに格納される状態を表す図である。
バンクNO.0乃至5は、デコード済みのIピクチャおよびPピクチャが、デコード順に格納されるようになされている。そして、バンクNo.5にI2ピクチャが格納された次のタイミングで、バンクNo.6にB1ピクチャが格納され、B1ピクチャが表示されるタイミングと同時に、バンクNo.7にB12ピクチャが格納され、参照画像としての利用が終了されたI2ピクチャが格納されていたバンクNo.5が解放される。そして、次に、P14ピクチャが表示されるタイミングには、開放されたバンクNo.5に、B10ピクチャが格納され、表示が終了されたB1ピクチャが格納されていたバンクNo.6が開放される。その後、IピクチャまたはPピクチャが格納されているバンクは、そのピクチャの参照画像としての利用と、表示されるピクチャはピクチャの表示とが、いずれも終了した時点で開放され、間引きされないBピクチャは、開放された時間が早いバンクから、順次格納され、そのBピクチャの表示後に、対応するバンクは開放される。すなわち、自身参照カウンタ、前方向参照カウンタ、および、後ろ方向参照カウンタのすべての値が0となったピクチャが格納されていたバンクが順次解放される。すなわち、図31における場合は、逆方向再生であるので、最初にバンクNo.0に格納されたI2ピクチャは、最後に表示されるため、このGOPの表示が終了するまで開放されない。
このように、MPEGなどに代表される画像圧縮方式で一般的な双方向のフレーム間予測を用いて圧縮した映像データを逆転再生、高速再生するような場合において、IピクチャおよびPピクチャを先にデコードし、Bピクチャのデコード時のバンク制御に上述した参照ポインタを用いるようにすることにより、複雑なバンク面制御を行うことなく、バンクの面数をできるだけ少なくして、効率よく逆方向再生、逆方向高速再生を実現することができる。
具体的には、フレームを保持しておくバンクの数が、デコードの処理単位に含まれるIピクチャおよびPピクチャの数と、Bピクチャ格納分の2面との合計数であれば、アンカーフレームであるIピクチャおよびPピクチャを先にデコードし、Bピクチャのデコード時のバンク制御に上述した参照ポインタを用いるようにすることにより、複雑なバンク面制御を行わずに、高速再生、逆方向再生を実現することができる。
例えば、本実施例のように、N=15,M=3の、MPEG LONG GOPストリームでは、I,P,P,P,Pピクチャの5面+次のIピクチャの1面+Bピクチャの2面の合計で、8面のビデオバンクメモリを用意することにより、IピクチャおよびPピクチャを先にデコードし、Bピクチャのデコード時のバンク制御に上述した参照ポインタを用いるようにすることにより、複雑なバンク面制御を行わずに、高速再生、逆方向再生、逆方向高速再生を実現することができる。
また、ユーザからの操作によるスピード変更レスポンスを向上するために、フレーム単位でスピードを変更する目的で、Bピクチャのデコードおよび、表示を止める処理を行おうとしたとき、Bピクチャのデコードと、表示のタイミングの制御を別に管理しているにもかかわらず、バンクを管理するための処理が煩雑となることを防いで、バンク管理をシンプルにすることができ、例えば、入力ストリームの過渡状態で不正な参照処理などが行われたとしても容易に復帰することができ(後述するアンダーフロー処理)、スピード変更をフレーム単位に行うことができる。
次に、図32のフローチャートを参照して、図19のステップS196において実行されるアンダーフロー処理について説明する。
ステップS361において、CPU20は、時間管理カウンタおよび時間カウンタを参照し、表示処理に対してストリームデータの供給が間に合っていない状態、すなわち、アンダーフローが発生したか否かを判断する。ステップS361において、アンダーフローが発生していないと判断された場合、処理は、図19のステップS196に戻り、図4のステップS34に進む。
ステップS361において、アンダーフローが発生していると判断された場合、ステップS362において、CPU20は、時間を示すカウンタである時間カウンタの値を、時間情報付きI/Pピクチャデコードキューの先頭の時刻にあわせて修正し、処理は、図19のステップS196に戻り、図4のステップS34に進む。
図33および図34を用いて、アンダーフロー発生時の時間カウンタの値の補正について説明する。なお、図33および図34において、カッコ内の数字の0,1,2は、デコーダ22乃至デコーダ24のうちのいずれかに対応してそれぞれ設定されている情報キューに蓄積される情報、または、デコーダ22乃至デコーダ24のうちのいずれかにおいてそれぞれ実行される処理であることを示すものである。
図33には、図26を用いて説明した場合と同様に、−5倍速再生でアンダーフローが発生していない場合の時間カウンタに対して、情報キューに蓄積される情報、および、デコードと表示のタイミングが図示されている。図33においては、あるGOPのIピクチャのデコード開始タイミングの時間カウンタの値が7である場合を例としている。
そして、例えば、2フレーム分アンダーフローが発生した場合、図34に示されるように、時間カウンタを2フレーム分遅延させ、その時間カウンタを参照して処理を再開させることにより、それ以降のスケジューリングとデコードおよび表示の制御を、滞りなく実行させることが可能となる。
このような処理により、例えば、高速再生時のHDD16のスループット不足などにより、ストリームの供給が滞った場合であっても、ストリームの供給が滞ったことによるアンダーフロー状態を検出し、時間情報計数をアンダーフローした時間分戻すことにより、破綻無く再生処理を再開することが可能である。
そして、図4のステップS34において、すべてのフレームの処理が終了されていないと判断された場合、ステップS35において、時間カウンタがインクリメントされ、処理は、ステップS31に戻り、次のフレームに対して、それ以降の処理が繰り返される。
なお、デコードと表示の開始タイミングの位相のずれは、デコード処理単位に含まれるIピクチャおよびPピクチャの数に基づいて求められるものとして説明したが、例えば、デコード処理単位に含まれるフレームのうち、表示されるフレーム数を基にデコードと表示の開始タイミングの位相のずれを求めることができるようにしても良い。
なお、正方向または逆方向の高速再生が実行される場合、例えば、2番目以降のデコード処理単位におけるデコードのスケジューリングにおいて、表示されるフレームと表示されないフレームとの判断、すなわち、間引きが行われるのに先立って、例えば、デコード処理単位の先頭で表示されるピクチャのピクチャタイプなどの符号化パラメータを予め検出するようにしても良い。
例えば、表示されるフレームと表示されないフレームとの判断が行われる前に、前のデコード処理単位のデコードのスケジュールにおいて計数されたフレームカウンタと、算出された間引き周期とに基づいて、デコード処理単位の先頭で表示されるピクチャのピクチャタイプを予め検出するようにしても良いし、他の方法で、デコード処理単位の先頭で表示されるピクチャのピクチャタイプを予め検出することができるようにしても良い。
このようにすることにより、デコードのスケジュール処理を、更に、正確に高速に実行することが可能となる。
以上においては、15ピクチャで1GOPが構成されている場合について説明したが、例えば、1GOPに含まれるアンカーフレーム(IピクチャおよびPピクチャ)の数が、5つ以上または4つ以下であるような場合、図1を用いて説明した再生装置1により上述した15ピクチャで1GOPが構成されている場合と同様にして1GOPごとにデコード処理を施すと、例えば、デコードされないピクチャが発生したり、デコード遅れが発生してしまう。
15ピクチャで1GOPが構成されていない場合に対応するために、図1を用いて説明した再生装置1においては、それぞれのGOPの構成を検出し、デコーダ22乃至デコーダ24のビデオバンクメモリ82の数に対応したアンカーフレームを有するデコード処理単位としてのデコードユニットを、GOPの分割および結合により構成するようにしても良い。具体的には、ビデオバンクメモリ82が8つのバンクを有している場合、1GOPをアンカーフレームが6フレーム以下となるように2つに分割するか、または、複数のGOPを結合することによりデコード処理単位を構成し、デコード処理単位に含まれるPピクチャおよびBピクチャを全てデコードするために必要となるアンカーフレームを含めて、デコードを行うものとする。
1GOPに30フレーム含まれている場合のGOP分割と、分割されたGOPのそれぞれのデコードについて、図35乃至図37を用いて説明する。
図35に示されるように、GOP(0)は、B0乃至P29の30フレームで構成され、次にGOP(1)が続いている。それぞれのデコード処理単位において、先頭の2枚のBピクチャは、その前のGOPと一緒にデコードされるようになされている。
GOP(0)には、アンカーフレームが10フレーム存在するので、15ピクチャで1GOPが構成されている場合と同様にして1GOPごとにデコード処理を施す方法では不具合が発生してしまう。そこで、図35の下段に示されるように、GOP(0)をアンカーフレームが6フレーム以下となる2つのデコード処理単位に分割し、デコードを行うものとする。
図36に示されるように、GOP(0)をI2乃至P17と、B18乃至P29およびB0B1の2つのデコード単位GOP(0−0)とGOP(0−1)とに分割してそれぞれ異なるデコーダにてデコードする。後半のGOP(0−1)の先頭の2つのBピクチャB18B19をデコードするには、GOP(0−0)の最後のアンカーフレームP17が必要である。すなわち、P17はGOP(0−1)のアンカーフレームでもある。また、後半のGOP(0−1)のアンカーフレームをデコードするには、前半のGOP(0−0)のアンカーフレームが必要である。したがって、GOP(0−1)のアンカーフレームをデコードする前に、GOP(0−0)のアンカーフレームをデコードし、その後、GOP(0−1)のアンカーフレームと次のGOPの先頭のIピクチャをデコードする。
したがって、GOP(0−0)とGOP(0−1)のいずれのデコード処理単位をデコードするデコーダにおいても、正方向であっても逆方向であっても、通常再生であっても、高速再生であっても、アンカーフレームのデコード順は不変である。一方、GOP(0−0)とGOP(0−1)のいずれのデコード処理単位においても、Bピクチャは、再生方向および再生速度によって、デコード順が異なる。図36においては、再生速度1倍の正方向再生および逆方向再生におけるデコード順が示されている。
すなわち、図37に示されるように、再生速度1倍の正方向再生においては、いずれかのデコーダにおいて、GOP(0−0)のアンカーフレームI2乃至P17がデコードされた後、GOP(0−0)のBピクチャB3乃至B16がデコードされるとともに、異なるデコーダにおいて、アンカーフレームI2乃至P14がデコードされた後、それを参照画像として、GOP(0−1)のアンカーフレームP17乃至P29およびGOP(1)の先頭のI2がデコードされ、続いて、GOP(0−1)のBピクチャB18乃至B28と、GOP(1)のB0B1がデコードされる。
そして、再生速度1倍の逆方向再生においては、いずれかのデコーダにおいて、アンカーフレームI2乃至P14がデコードされた後、それを参照画像として、GOP(0−1)のアンカーフレームP17乃至P29およびGOP(1)の先頭のI2がデコードされ、続いて、GOP(1)のB1B0とGOP(0−1)のBピクチャB28乃至B18がデコードされ、異なるデコーダにおいて、GOP(0−0)のアンカーフレームI2乃至P17がデコードされた後、GOP(0−0)のBピクチャB16乃至B3がデコードされる。
次に、1GOPに含まれるアンカーフレーム数が4以下であるGOPが連続する場合のデコード処理単位の設定と、デコード処理について、図38乃至図40を用いて説明する。
図38に示されるように、B0乃至P5の6フレームで1GOPのGOP(0)が構成され、B(0)乃至P8の9フレームでGOP(1)が構成され、そして、GOP(2)が続いている。それぞれのデコード処理単位において、先頭の2枚のBピクチャは、その前のGOPと一緒にデコードされるようになされている。
GOP(0)には、アンカーフレームが2フレーム存在し、GOP(1)には、アンカーフレームが3フレーム存在する。そこで、図38の下段に示されるように、GOP(0)とGOP(1)とを結合してアンカーフレームが6フレーム以下となるデコード処理単位を設定し、デコードを行うものとする。
ここでは、GOP(0)の先頭のB0およびB1は、前のGOPとともにデコードされ、GOP(0)のI2乃至P5、GOP(1)、および、GOP(2)の先頭のB0およびB1を、1つのデコード処理単位GOP(0−0)としてデコードする。図39に示されるように、正方向であっても逆方向であっても、通常再生であっても、高速再生であっても、アンカーフレームのデコード順は不変である。一方、Bピクチャは、再生方向および再生速度によって、デコード順が異なる。図39においては、再生速度1倍の正方向再生および逆方向再生におけるデコード順が示されている。
すなわち、図40に示されるように、再生速度1倍の正方向再生においては、いずれかのデコーダにおいて、GOP(0−0)のアンカーフレームおよびGOP(2)の先頭のI2がデコードされ、続いて、GOP(0−0)のBピクチャがデコードされる。そして、再生速度1倍の逆方向再生においては、いずれかのデコーダにおいて、GOP(0−0)のアンカーフレームおよびGOP(2)の先頭のI2がデコードされ、続いて、GOP(0−0)のBピクチャが、逆方向再生されるようにデコードされる。
次に、1GOPに含まれるアンカーフレーム数が6GOP以上の長いGOPと、1GOPに含まれるアンカーフレーム数が4以下の短いGOPが連続している場合、これらのGOPを結合した後分割してデコード処理単位を設定し、デコーダへの負荷を均等化するようにした場合について、図41乃至図43を用いて説明する。
図41に示されるように、B0乃至P20の21フレームで1GOPのGOP(0)が構成され、B0乃至P8の9フレームで1GOPのGOP(1)が構成され、次にGOP(2)が続いている。それぞれのデコード処理単位において、先頭の2枚のBピクチャは、その前のGOPと一緒にデコードされるようになされている。
GOP(0)には、アンカーフレームが7フレーム存在するので、上述したように、15ピクチャで1GOPが構成されている場合と同様にして1GOPごとにデコード処理を施す方法では、不具合なくデコードすることができない。そこで、GOP(0)をアンカーフレームが6フレーム以下となる2つのデコード処理単位に分割するようにしてもよいが、ここでは、続くGOPを構成するフレーム数が少ないので、図41の下段に示されるように、GOP(0)とGOP(1)を結合した後、分割して、GOP(0)とGOP(1)から、2つのデコード処理単位GOP(0−0)とGOP(0−1)とを設定し、このデコード処理単位に基づいてデコードを行うものとする。
図42に示されるように、GOP(0)とGOP(1)を結合した後、GOP(0)のI2乃至P17を第1のデコード処理単位GOP(0−0)とし、GOP(0)のB18乃至P20、GOP(1)全体、および、GOP(2)のB1B2とを第2のデコード処理単位GOP(0−1)として、それぞれ異なるデコーダにてデコードする。GOP(0−1)の先頭の2つのBピクチャB18B19をデコードするには、GOP(0−0)の最後のアンカーフレームP17が必要である。すなわち、P17はGOP(0−1)のアンカーフレームでもある。また、後半のGOP(0−1)のアンカーフレームをデコードするには、前半のGOP(0−0)のアンカーフレームが必要である。したがって、GOP(0−1)のアンカーフレームをデコードする前に、GOP(0−0)のアンカーフレームをデコードし、その後、GOP(0−1)のアンカーフレームと次のGOPの先頭のIピクチャをデコードする。
したがって、GOP(0−0)とGOP(0−1)のいずれのデコード処理単位をデコードするデコーダにおいても、正方向であっても逆方向であっても、通常再生であっても、高速再生であっても、アンカーフレームのデコード順は不変である。一方、GOP(0−0)とGOP(0−1)のいずれのデコード処理単位においても、Bピクチャは、再生方向および再生速度によって、デコード順が異なる。図42においては、再生速度1倍の正方向再生および逆方向再生におけるデコード順が示されている。
すなわち、図43に示されるように、再生速度1倍の正方向再生においては、いずれかのデコーダにおいて、GOP(0−0)のアンカーフレームである、GOP(0)のI2乃至P17がデコードされた後、GOP(0−0)のBピクチャ、すなわち、GOP(0)のB3乃至B16がデコードされる。そして、異なるデコーダにおいて、GOP(0−0)のアンカーフレームI2乃至P14がデコードされた後、それを参照画像として、GOP(0−1)のアンカーフレームである、GOP(0)のP17,P20、GOP(1)のI2,P5,P8、およびGOP(2)の先頭のI2がデコードされ、続いて、GOP(0−1)のBピクチャである、GOP(0)のB18、B19、GOP(1)のB0乃至B7、および、GOP(2)のB0B1がデコードされる。
そして、再生速度1倍の逆方向再生においては、いずれかのデコーダにおいて、GOP(0−0)のアンカーフレームI2乃至P14がデコードされた後、それを参照画像として、GOP(0−1)のアンカーフレームである、GOP(0)のP17,P20、GOP(1)のI2,P5,P8、およびGOP(2)の先頭のI2がデコードされ、続いて、GOP(2)のB1B0と、GOP(0−1)のBピクチャである、GOP(1)のB7乃至B0、および、GOP(0)のB19、B18がデコードされる。そして、異なるデコーダにおいて、GOP(0−0)のアンカーフレームである、GOP(0)のI2乃至P17がデコードされた後、GOP(0−0)のBピクチャ、すなわち、GOP(0)のB16乃至B3がデコードされる。
次に、1GOPに含まれるアンカーフレーム数が4以下の短いGOPと、1GOPに含まれるアンカーフレーム数が6GOP以上の長いGOPとが連続している場合、これらのGOPを結合した後分割してデコード処理単位を設定し、デコーダへの負荷を均等化するようにした場合について、図44乃至図46を用いて説明する。
図44に示されるように、B0乃至P8の9フレームで1GOPのGOP(0)が構成され、B0乃至P14の15フレームで1GOPのGOP(1)が構成され、次にGOP(2)が続いている。それぞれのデコード処理単位において、先頭の2枚のBピクチャは、その前のGOPと一緒にデコードされるようになされている。
GOP(0)には、アンカーフレームが3フレームしか存在しないが、GOP(1)には、アンカーフレームが5フレーム存在するので、図44の下段に示されるように、GOP(0)とGOP(1)を結合した後、分割して、GOP(0)とGOP(1)から、2つのデコード処理単位GOP(0−0)とGOP(0−1)とを設定し、このデコード処理単位に基づいてデコードを行うものとする。
図45に示されるように、GOP(0)とGOP(1)を結合した後、GOP(0)のI2乃至GOP(1)のP8を第1のデコード処理単位GOP(0−0)とし、GOP(1)のB9乃至P14と、GOP(2)のB1B2とを第2のデコード処理単位GOP(0−1)として、それぞれ異なるデコーダにてデコードする。GOP(0−1)の先頭の2つのBピクチャB9B10をデコードするには、GOP(0−0)の最後のアンカーフレームP8が必要である。すなわち、P8はGOP(0−1)のアンカーフレームでもある。また、後半のGOP(0−1)のアンカーフレームをデコードするには、前半のGOP(0−0)のアンカーフレームのうち、GOP(1)のI2およびP5が必要である。したがって、GOP(0−1)のアンカーフレームをデコードする前に、GOP(0−0)のアンカーフレームに含まれるGOP(1)のI2およびP5をデコードし、その後、GOP(0−1)のアンカーフレームと次のGOPの先頭のIピクチャをデコードする。
したがって、GOP(0−0)とGOP(0−1)のいずれのデコード処理単位をデコードするデコーダにおいても、正方向であっても逆方向であっても、通常再生であっても、高速再生であっても、アンカーフレームのデコード順は不変である。一方、GOP(0−0)とGOP(0−1)のいずれのデコード処理単位においても、Bピクチャは、再生方向および再生速度によって、デコード順が異なる。図45においては、再生速度1倍の正方向再生および逆方向再生におけるデコード順が示されている。
すなわち、図46に示されるように、再生速度1倍の正方向再生においては、いずれかのデコーダにおいて、GOP(0−0)のアンカーフレームである、GOP(0)のI2乃至P8と、GOP(1)のI2乃至P8がデコードされた後、GOP(0−0)のBピクチャ、すなわち、GOP(0)のB3乃至B7とGOP(1)のB0乃至B7がデコードされる。そして、異なるデコーダにおいて、GOP(0−0)のアンカーフレームのうちGOP(1)のアンカーフレームであるI2およびP5がデコードされた後、それを参照画像として、GOP(0−1)のアンカーフレームである、GOP(1)のP8乃至P14、およびGOP(2)の先頭のI2がデコードされ、続いて、GOP(0−1)のBピクチャであるGOP(1)のB9乃至B13、および、GOP(2)のB0B1がデコードされる。
そして、再生速度1倍の逆方向再生においては、いずれかのデコーダにおいて、GOP(0−0)のアンカーフレームのうちGOP(1)のアンカーフレームであるI2およびP5がデコードされた後、それを参照画像として、GOP(0−1)のアンカーフレームである、GOP(1)のP8乃至P14、およびGOP(2)の先頭のI2がデコードされ、続いて、GOP(2)のB1B0と、GOP(0−1)のBピクチャである、GOP(1)のB13乃至B9がデコードされる。そして、異なるデコーダにおいて、GOP(0−0)のアンカーフレームである、GOP(0)のI2乃至P8およびGOP(1)のI2乃至P8がデコードされた後、GOP(0−0)のBピクチャ、すなわち、GOP(1)のB7乃至B0およびGOP(0)のB7乃至B3がデコードされる。
図35乃至図46を用いて説明した様にして、デコード処理単位としてのデコードユニットが構成されるので、デコードユニットごとにスケジューリングが実行されて、指定された再生方向および再生速度で再生されるように、必要に応じて間引き処理が実行されて、デコードが行われ、ストリームが再生出力される。
具体的には、CPU20が、メモリ18に転送されて保存されている複数のGOPのうちの次にデコードされるGOPと、その次(2番目)のGOPの構成を読み出して、アンカーフレームの数を基に、デコード処理単位としてのデコードユニットを、GOPの分割および結合により構成し、PCIブリッジ17に制御コマンドを送出して、メモリ18からデコードユニットごとにストリームデータを読み出させて、デコーダ22乃至デコーダ24のいずれかに供給させるように制御する。PCIブリッジ17は、CPU20の制御に基づいて、メモリ18からデコードユニットごとにストリームデータを読み出して、デコーダ22乃至デコーダ24のいずれかに供給する。
そして、CPU20は、デコードユニットに対して、上述した場合と同様にしてスケジューリングを行う。このとき、例えば、図35を用いて説明したGOP(0−1)、図41を用いて説明したGOP(0−1)、または、図44を用いて説明したGOP(0−1)図41を用いて説明したGOP(0−1)のように、そのデコードユニットのアンカーフレームをデコードするために、他のデコードユニットのアンカーフレームの少なくとも一部をデコードする必要がある場合、入力ピクチャキューには、アンカーフレームをデコードするために必要な他のデコードユニットのアンカーフレームも設定される。すなわち、アンカーフレームをデコードするために必要な他のデコードユニットのアンカーフレームは表示順情報キューにも設定される。
そして、図12および図13のフローチャートを参照して説明した、デコード設定処理において、CPU20は、表示順情報キューに設定されているピクチャIDを基に、参照カウンタのポインタを設定する。
例えば、図35を用いて説明したGOP(0−1)に対応する表示順情報キューに、I(2)、P(5),P(8),P(11),P(14),P(17),B(18),B(19),P(20),B(21),B(22),P(23),B(24),B(25),P(26),B(27),B(28),P(29),B(0),B(1),I(2)のようにピクチャIDが格納されている場合、B(21)に対応付けられて、自身参照ポインタとして自分自身のディスプレイオーダ順を示すポインタが、前方向参照ポインタとして、前方向の参照画像であるP(20)のディスプレイオーダ順を示すポインタが、後ろ方向参照ポインタとして、後ろ方向参照画像であるP(23)のディスプレイオーダ順を示すポインタが、それぞれ設定される。そして、P(20)に対応付けられて、自身参照ポインタとして自分自身のディスプレイオーダ順を示すポインタと、前方向参照ポインタとして、前方向の参照画像であるP(17)のディスプレイオーダ順を示すポインタがそれぞれ設定され、P(17)に対応付けられて、自身参照ポインタとして自分自身のディスプレイオーダ順を示すポインタと、前方向参照ポインタとして、前方向の参照画像であるP(14)のディスプレイオーダ順を示すポインタがそれぞれ設定される。そして、同様に、それぞれの自身参照ポインタに加えて、前方向参照ポインタとして、P(14)にはP(11)のディスプレイオーダを示すポインタが、P(11)にはP(8)のディスプレイオーダを示すポインタが、P(8)にはP(5)のディスプレイオーダを示すポインタが、P(5)にはI(2)のディスプレイオーダを示すポインタが、それぞれ設定される。
I(2),P(5),P(8),P(11),P(14)、および、P(17)は、デコード設定処理のステップS116において、所定の15フレームに含まれないと判断されるが、デコード設定されるピクチャIDであるため、ステップS118において削除されない。
そして、ステップS119において、CPU20は、処理対象のフレームは、表示されるか否かを判断するので、ここで、I(2)、P(5),P(8),P(11),P(14)、および、P(17)は、表示されないフレームであると判断される。
ステップS119において、表示が行われないと判断され、ステップS124において、Pピクチャであると判断された場合、ステップS125において、CPU20は、参照カウンタのポインタを基に、対象となる前方向参照カウンタに1を加算する。具体的には、処理対象のフレームが、P(20)である場合、P(17)に対応付けられて、前方向参照ポインタが設定されるので、CPU20は、P(14)の前方向の参照カウンタに、1を加算し、同様にして、I(2)、P(5),P(8),P(11)の前方向の参照カウンタに、1を加算する。
ステップS125の処理の終了後、または、ステップS119において、表示が行われないと判断され、ステップS126において、Iピクチャであると判断された場合、ステップS127において、CPU20は、対応するピクチャIDを、いずれかのデコードキューに設定し、表示順情報キューから削除する。すなわち、I(2)、P(5),P(8),P(11),P(14)、および、P(17)は、I/Pデコードキューに設定される。
このようにしてI/Pデコードキューには、アンカーフレームのデコードのためにデコードされる、デコードユニット以外のIピクチャおよびPピクチャも設定され、そのデコードユニットのアンカーフレームに先立ってデコードされるようにデコードスケジュールが設定される。
そして、CPU20は、次のデータを供給するデコーダを示すレジスタに保持されている値を参照し、デコーダ22乃至デコーダ24のうちデコードを実行するデコーダとして設定されているものを制御する。デコード処理を実行するデコーダ22乃至デコーダ24のうちのいずれかのエレメンタリストリームアドレス決定部73は、CPU20の制御に基づいて、時間情報付きI/Pピクチャデコードキューに設定されたピクチャIDに対応するピクチャのデータを、メモリコントローラ74により、入力バッファ75から読み出して、デコード処理部77に供給する。
デコードされるピクチャがIピクチャである場合、CPU20は、デコード処理部77を制御して、メモリコントローラ74から供給されたIピクチャをデコードさせるとともに、書き込み画アドレス決定部78を制御して、デコードされたフレームデータをメモリコントローラ81に供給させて、ビデオバンクメモリ82に保存させる。また、デコードされるピクチャがPピクチャである場合、CPU20は、参照画アドレス決定部79を制御してPピクチャの参照バンク位置を基に、メモリコントローラ81により、ビデオバンクメモリ82に格納されている参照画を読み出させて、デコード処理部77に供給させ、デコード処理部77を制御して、メモリコントローラ74から供給されたPピクチャをデコードさせるとともに、書き込み画アドレス決定部78を制御して、デコードされたフレームデータをメモリコントローラ81に供給させて、ビデオバンクメモリ82に保存させ、対象となる前方向の参照カウンタから1を減算する。また、デコードされるピクチャがBピクチャである場合、CPU20は、参照画アドレス決定部79を制御して、Bピクチャの参照バンク位置を基に、メモリコントローラ81により、ビデオバンクメモリ82に格納されている参照画を読み出させて、デコード処理部77に供給させ、デコード処理部77を制御して、メモリコントローラ74から供給されたBピクチャをデコードさせ、対象となる前方向および後ろ方向の参照カウンタから1を減算する。
すなわち、デコードユニット以外のIピクチャおよびPピクチャは、先頭から順次、参照カウンタの値がすべて0となるので、これらのピクチャIDに対応するバンクは解放され、アンカーフレームまたはBピクチャのデコードに用いることが可能となる。
次に、図47のフローチャートを参照して、1GOPを構成するピクチャ数が15以外であるときのGOP分割・結合処理について説明する。
ステップS601において、CPU20は、分割後、スケジューリングされていないデコードユニットがあるか否かを判断する。
ステップS601において、スケジューリングされていないデコードユニットがあると判断された場合、ステップS602において、CPU20は、上述したフレームごとに行う処理によって、スケジュールされていない分割後のデコードユニットのデコードをスケジューリングし、デコードする。
ステップS601において、スケジューリングされていないデコードユニットがないと判断された場合、ステップS603において、CPU20は、デコードのスケジューリングが行われていない次のGOPおよび2番目のGOPの構成を検出する。
ステップS604において、CPU20は、次のGOPは、1つのデコーダでデコード可能な最大のサイズよりも大きいか否かを判断する。具体的には、CPU20は、次のGOPのアンカーフレームの数を確認し、1つのデコーダに用意されているバンクの数によって決まる、1つのデコーダで処理するのに適したアンカーフレーム数と比較することにより、次のGOPが1つのデコーダでデコード可能な最大のサイズよりも大きいか否かを判断する。
ステップS604において、次のGOPは1つのデコーダでデコード可能な最大のサイズよりも大きいと判断された場合、ステップS605において、CPU20は、次のGOPと2番目のGOPとを結合して、2つのデコーダでデコード可能なサイズとなるか否かを判断する。具体的には、CPU20は、ビデオバンクメモリ82が8つのバンクを有している場合、次のGOPと2番目のGOPとを結合したときにアンカーフレームが10フレーム以下、すなわち、ビデオバンクメモリ82のバンク数から3を減算した値の2倍以下となっているか否かを判断する。
ステップS605において、次のGOPと2番目のGOPとを結合して、2つのデコーダでデコード可能なサイズとなると判断された場合(例えば、図41乃至図43を用いて説明した様に、1GOPに含まれるアンカーフレーム数が6GOP以上の長いGOPと、1GOPに含まれるアンカーフレーム数が4以下の短いGOPが連続している場合など)、処理は、後述するステップS610に進む。
ステップS605において、次のGOPと2番目のGOPとを結合して、2つのデコーダでデコード可能なサイズとならないと判断された場合、ステップS606において、CPU20は、例えば、図35乃至図37を用いて説明した30ピクチャで1GOPが構成されている場合のように、次のGOPを、1つのデコーダでデコード可能な大きさの複数のデコードユニットに分割し、処理は、後述するステップS612に進む。
ステップS604において、次のGOPは1つのデコーダでデコード可能な最大のサイズよりも大きくない(すなわち、小さい)と判断された場合、ステップS607において、CPU20は、次のGOPと2番目のGOPとを結合して、1つのデコーダでデコード可能なサイズとなるか否かを判断する。
ステップS607において、次のGOPと2番目のGOPとを結合して、1つのデコーダでデコード可能なサイズとなると判断された場合、ステップS608において、CPU20は、例えば、図38乃至図40を用いて説明した1GOPに含まれるアンカーフレーム数が4以下であるGOPが連続する場合のようにして、次のGOPと2番目のGOPとを結合して、1つのデコードユニットとし、処理は、後述するステップS612に進む。
ステップS607において、次のGOPと2番目のGOPとを結合して、1つのデコーダでデコード可能なサイズとならないと判断された場合、ステップS609において、CPU20は、次のGOPと2番目のGOPとを結合して、2つのデコーダでデコード可能なサイズとなるか否かを判断する。具体的には、CPU20は、例えば、図44乃至図46を用いて説明した1GOPに含まれるアンカーフレーム数が4以下の短いGOPと、1GOPに含まれるアンカーフレーム数が6GOP以上の長いGOPとが連続しているときなどのように、ビデオバンクメモリ82が8つのバンクを有している場合、次のGOPと2番目のGOPとを結合したときにアンカーフレームが10フレーム以下、すなわち、ビデオバンクメモリ82のバンク数から3を減算した値の2倍以下となっているか否かを判断する。
ステップS605において、次のGOPと2番目のGOPとを結合して、2つのデコーダでデコード可能なサイズとなると判断された場合、または、ステップS609において、次のGOPと2番目のGOPとを結合して、2つのデコーダでデコード可能なサイズとなると判断された場合、ステップS610において、CPU20は、例えば、図41乃至図43を用いて説明した場合や、図44乃至図46を用いて説明した場合のように、次のGOPと2番目のGOPとを結合後、分割して、2つのデコードユニットとし、処理は、後述するステップS612に進む。
ステップS609において、次のGOPと2番目のGOPとを結合して、2つのデコーダでデコード可能なサイズとならないと判断された場合、ステップS611において、CPU20は、次のGOPを、そのまま、1つのデコードユニットとする。
ステップS606、ステップS608、ステップS610、または、ステップS611の処理の終了後、ステップS612において、CPU20は、上述した処理により設定されたデコードユニットのうち、次にデコードされるデコードユニットのデコードを、上述したフレームごとに行う処理によってスケジューリングし、デコードする。
ステップS613において、CPU20は、スケジュールされていない分割後のデコードユニットがある場合、そのデコードユニットを、スケジュール待ちのデータとして保持し、処理が終了される。
このような処理により、1GOPを構成するピクチャ数が、15ピクチャ以外であり、GOPごとに異なるような場合においても、高速にデコード処理ができるように、GOPの分割や結合が行われる。
なお、ここでは、デコーダ22乃至デコーダ24のそれぞれのビデオバンクメモリ82が8バンクである場合のスケジューリングが無駄なく行われるようなGOPの分割または結合の方法について説明したが、デコーダ22乃至デコーダ24のそれぞれのビデオバンクメモリ82に保持可能なフレームの数(バンクの数)が8つではない場合においては、ビデオバンクメモリ82に保持可能なフレームの数(バンクの数)に応じて、GOPの分割または結合が行われるようにしても良いことは言うまでもない。
なお、GOP分割時の後ろのデコードユニット、すなわち、アンカーフレームデコードのために、前のデコードユニットのアンカーフレームをデコードする必要があるデコードユニットにおいては、そのデコードユニットに含まれているアンカーフレームの数が6フレームである場合、そのデコードユニットに含まれているアンカーフレームのデコード開始タイミングから表示開始タイミングのずれは、先頭がIピクチャまたはPピクチャのとき6ピクチャずれで、Bピクチャのとき7ピクチャずれである。また、そのデコードユニットに含まれているアンカーフレームの数が5フレーム以下のnフレームである場合、そのデコードユニットに含まれているアンカーフレームのデコード開始タイミングと表示開始タイミングのずれは、デコードユニットに含まれるアンカーフレーム数に基づいて変更されるものとなり、先頭がIピクチャまたはPピクチャのときnフレームずれで、Bピクチャのときn+1フレームずれである。
図48は、図35を用いて説明したデコードユニットGOP(0−1)が、1倍速再生時にビデオバンクメモリ82の8つのバンクに格納される状態を表す図である。
まず、バンクNo.0乃至5に、アンカーフレームのデコードのためにデコードされるGOP(0−0)のI2,P5,P8,P11,P14、および、P17が、デコード順に格納されるようになされている。P5がデコードされたとき、I2の参照カウンタは全て0となるので、バンクNo.0は解放され、他のデータを上書きして保持することが許可される。P8がデコードされたとき、P5の参照カウンタは全て0となるので、バンクNo.1は解放され、他のデータを上書きして保持することが許可される。P11がデコードされたとき、P8の参照カウンタは全て0となるので、バンクNo.2は解放され、他のデータを上書きして保持することが許可される。P14がデコードされたとき、P11の参照カウンタは全て0となるので、バンクNo.3は解放され、他のデータを上書きして保持することが許可される。P17がデコードされたとき、P14の参照カウンタは全て0となるので、バンクNo.4は解放され、他のデータを上書きして保持することが許可される。P17が格納されているバンクNo.5は、デコードユニットGOP(0−1)のB18,B19がデコードされるまで、開放されない。
そして、その後、デコードユニットGOP(0−1)のそれぞれのフレームのデコードが開始される。まず、デコードユニットGOP(0−1)のデコード済みのIピクチャおよびPピクチャが、空きバンクに順次格納されるようになされているので、バンクNo.6にP20、バンクNo.7にP23、そして、解放されたバンクNo.0にP26、バンクNo.1にP29、バンクNo.2に次のデコードユニットのI2が格納される。続いて、バンクNo.3にB18ピクチャが格納され、B18ピクチャが表示されるタイミングと同時に、バンクNo.4にB19ピクチャが格納され、B19ピクチャが表示されるタイミングには、表示が終了されたB18ピクチャが格納されていたバンクNo.3と、参照画像としての利用が終了したP17ピクチャが格納されていたバンクNo.5とが開放され、バンクNo.5には、B21ピクチャが格納される。その後、IピクチャまたはPピクチャが格納されているバンクは、そのピクチャの参照画像としての利用とピクチャの表示とがいずれも終了した時点で開放される。デコードされたBピクチャは、開放された時間が早いバンクから、順次格納され、Bピクチャが格納されているバンクは、そのピクチャの表示後に開放される。すなわち、自身参照カウンタ、前方向参照カウンタ、および、後ろ方向参照カウンタのすべての値が0となったピクチャが格納されていたバンクが順次解放され、Bピクチャは、開放された時間が早いバンクから、順次格納され、表示後に開放される。
図49は、図41を用いて説明したデコードユニットGOP(0−1)が、−1倍速再生時にビデオバンクメモリ82の8つのバンクに格納される状態を表す図である。
まず、バンクNo.0乃至5に、アンカーフレームのデコードのためにデコードされるGOP(0−0)のI2,P5,P8,P11,P14、および、P17が、デコード順に格納されるようになされている。P5がデコードされたとき、I2の参照カウンタは全て0となるので、バンクNo.0は解放され、他のデータを上書きして保持することが許可される。P8がデコードされたとき、P5の参照カウンタは全て0となるので、バンクNo.1は解放され、他のデータを上書きして保持することが許可される。P11がデコードされたとき、P8の参照カウンタは全て0となるので、バンクNo.2は解放され、他のデータを上書きして保持することが許可される。P14がデコードされたとき、P11の参照カウンタは全て0となるので、バンクNo.3は解放され、他のデータを上書きして保持することが許可される。P17がデコードされたとき、P14の参照カウンタは全て0となるので、バンクNo.4は解放され、他のデータを上書きして保持することが許可される。P17が格納されているバンクNo.5は、デコードユニットGOP(0−1)のB18,B19がデコードされるまで、開放されない。
そして、その後、デコードユニットGOP(0−1)のそれぞれのフレームのデコードが開始される。まず、デコードユニットGOP(0−1)のデコード済みのIピクチャおよびPピクチャが、空きバンクに順次格納されるようになされているので、バンクNo.6にP20、バンクNo.7にI2、そして、解放されたバンクNo.0にP5、バンクNo.1にP8、バンクNo.2に次のデコードユニットのI2が格納される。続いて、バンクNo.3にB1ピクチャが格納され、B1ピクチャが表示されるタイミングと同時に、バンクNo.4にB0ピクチャが格納され、B0ピクチャが表示されるタイミングには、表示が終了されたB1ピクチャが格納されていたバンクNo.3と、参照画像としての利用が終了したI2ピクチャが格納されていたバンクNo.2とが開放され、バンクNo.2には、B7ピクチャが格納される。その後、IピクチャまたはPピクチャが格納されているバンクは、そのピクチャの参照画像としての利用とピクチャの表示とが、いずれも終了した時点で開放され、デコードされたBピクチャは、開放された時間が早いバンクから、順次格納され、そのBピクチャの表示後に、対応するバンクは開放される。すなわち、自身参照カウンタ、前方向参照カウンタ、および、後ろ方向参照カウンタのすべての値が0となったピクチャが格納されていたバンクが順次解放される。すなわち、図49における場合は、逆方向再生であるので、最初にバンクNo.5に格納されたP17ピクチャは、最後に表示されるB18に参照されるため、このGOPの表示が終了するまで開放されない。
図50は、図44を用いて説明したデコードユニットGOP(0−1)が、2倍速再生時にビデオバンクメモリ82の8つのバンクに格納される状態を表す図である。
まず、バンクNo.0乃至2に、アンカーフレームのデコードのためにデコードされるGOP(0−0)のI2、P5、および、P8が、デコード順に格納されるようになされている。P5がデコードされたとき、I2の参照カウンタは全て0となるので、バンクNo.0は解放され、他のデータを上書きして保持することが許可される。P8がデコードされたとき、P5の参照カウンタは全て0となるので、バンクNo.1は解放され、他のデータを上書きして保持することが許可される。P8が格納されているバンクNo.2は、デコードユニットGOP(0−1)のB9がデコードされるまで、開放されない。
そして、その後、デコードユニットGOP(0−1)のそれぞれのフレームのデコードが開始される。デコード済みのIピクチャおよびPピクチャが、デコード順に格納されるようになされているので、バンクNo.3にP11、バンクNo.4にP14、バンクNo.5にI2が格納される。続いて、バンクNo.6に最初に表示されるB9ピクチャが格納され、最初のB9ピクチャの表示タイミングと同時に、バンクNo.7にB13ピクチャが格納され、P11ピクチャが表示されるタイミングと同時に、解放されているバンクNo.0にB0ピクチャが格納される。すなわち、自身参照カウンタ、前方向参照カウンタ、および、後ろ方向参照カウンタのすべての値が0となったピクチャが格納されていたバンクが順次解放され、デコードされたBピクチャは、開放された時間が早いバンクから、順次格納され、表示後に開放される。
このように、GOPの分割、または、結合によって構成されるデコード処理単位であるデコードユニットをデコードする場合においても、参照カウンタを参照することにより、バンクメモリの容量が少なくても、複雑な制御を行うことなく、圧縮符号化データをデコードして、高速再生、逆方向再生、または、逆方向高速再生を行うことができる。
なお、以上の説明においては、アンカーフレームのデコード用として固定されているバンクの数に対して、1つのデコードユニットに含まれるアンカーフレームの数が同一か、それよりも少なくなるようにデコードユニットが設定されるものとして説明したが、デコードユニットは、前のデコードユニットのアンカーフレーム数と比較して、m(mは1以上の実験的経験的に設定可能な正の整数で、例えば、2乃至4フレーム程度が好適である)フレーム以上多くしないようにデコードユニットを設定すると、更に好適である。
例えば、アンカーフレーム数1のGOPと、アンカーフレーム数10のGOPとがが連続していた場合、2GOPの合計アンカーフレーム数が11となり、この2GOPを加えて、2つのデコードユニットを構成することができない。このため、「アンカーフレーム数1+1」「アンカーフレーム数5+1」「アンカーフレーム数5+1」の構成でデコードが行われてしまい、デコード遅れが発生してしまう。
そこで、例えば、前のデコードユニットのアンカーフレーム数と比較して、2以上多いアンカーフレームを含まないようにデコードユニットを設定するものとした場合、2GOPの合計アンカーフレーム数が11であるとき、「アンカーフレーム数1+1」「アンカーフレーム数3+1」「アンカーフレーム数3+1」「アンカーフレーム数4+1」の構成でデコードユニットが構成されて、デコードが実行されるので、デコード遅れは発生しない。
さらに、HDD16に記録されている圧縮符号化データに対して、HDD16から読み出すデータとして有効であるか否かを示す読み出し用のフラグ群、デコードのスケジューリングにおいて有効であるか否かを示すデコード用のフラグ群、デコードされたデータを表示するスケジューリングにおいて有効であるか否かを示す表示用のフラグ群等をメタデータとして適宜設け、一連のフラグ群を再生速度・方向に応じて自動的に更新することによりスケジューリングを管理することも可能である。
このとき、過去の可変速再生処理に用いた一連のスケジューリング、フラグ群の更新情報を、別途スケジューリングのメタデータ(履歴情報)として管理することも可能であり、必要に応じて、圧縮符号化データ中にシンタックスとして記述したり、記録媒体であるHDD16等に別途記録したりしても良い。
また、デコーダ数、バンク数、デコーダID等をメタデータ(構成履歴情報)として管理することも可能である。さらに、再生速度、再生方向等をメタデータ(再生履歴情報)として管理することも可能である。このとき、これらメタデータを、必要に応じて圧縮符号化データ中にシンタックスとして記述したり、記録媒体であるHDD16等に別途記録したりしても良い。
このようなメタデータ(履歴情報)を参照することにより、過去に行われたスケジューリング処理を再利用することができ、更に正確に高速にスケジューリング処理を実行することが可能となる。
なお、このようなメタデータは、例えば、データベースとして外部装置で管理するような構成にしてもよい。
なお、上述の実施の形態においては、デコーダ22乃至デコーダ24が、HDD16に記録されている圧縮符号化データを、完全にデコードしない(中途段階までデコードする)場合においても、本発明は適用可能である。
具体的には、例えば、デコーダ22乃至デコーダ24が、可変長符号に対する復号および逆量子化のみを行い、逆DCT変換を実行しない場合や、逆量子化を行うが可変長符号に対する復号を行わない場合などにおいても、本発明を適用することができる。このような場合、例えば、デコーダ22乃至デコーダ24は、例えば、符号化処理および復号処理処理においてどの段階(例えば逆量子化の段階)まで処理が行われたかを示す履歴情報を必要に応じて生成し、不完全に復号されたデータに対応付けて出力することができるようにしても良い。
さらに、上述の実施の形態においては、HDD16に、不完全に符号化されたデータ(例えば、DCT変換および量子化が行われているが、可変長符号化処理が行われていないデータなど)と、必要に応じて、符号化処理および復号処理の履歴情報が記憶されており、デコーダ22乃至デコーダ24が、CPU20の制御に基づいて、供給された不完全に符号化されたデータをデコードし、ベースバンド信号に変換することができるような場合においても、本発明は適用可能である。
具体的には、デコーダ22乃至デコーダ24が、例えば、DCT変換および量子化が行われているが、可変長符号化処理が行われていない不完全に符号化されたデータに対して、逆DCT変換および逆量子化のみを行い、可変長符号に対する復号は実行しない場合などにおいても、本発明を適用することができる。
また、このような場合、例えば、CPU20は、不完全に符号化されたデータに対応付けられてHDD16に記憶されている符号化処理および復号処理の履歴情報を取得し、これらの情報に基づいて、デコーダ22乃至デコーダ24によるデコードのスケジューリングを行うことができるようにしても良い。
さらに、上述の実施の形態においては、HDD16に、不完全に符号化されたデータと、必要に応じて、符号化処理および復号処理の履歴情報が記憶されており、デコーダ22乃至デコーダ24が、CPU20の制御に基づいて、供給された不完全に符号化されたデータを完全にデコードしない(中途段階までデコードする)場合においても、本発明は適用可能である。
また、このような場合も、例えば、CPU20は、不完全に符号化されたデータに対応付けられてHDD16に記憶されている符号化処理および復号処理の履歴情報を取得し、これらの情報に基づいて、デコーダ22乃至デコーダ24によるデコードのスケジューリングを行うことができるようにしても良い。更に、この場合においても、デコーダ22乃至デコーダ24は、符号化処理および復号処理の履歴情報を必要に応じて生成し、不完全に復号されたデータに対応付けて出力することができるようにしても良い。
換言すれば、デコーダ22乃至デコーダ24が、CPU20の制御に基づいて、部分的な復号を行う(復号処理の工程のうちの一部を実行する)場合においても、本発明は適用可能であり、CPU20は、不完全に符号化されたデータに対応付けてHDD16に記憶されている符号化処理および復号処理の履歴情報を取得し、これらの情報に基づいて、デコーダ22乃至デコーダ24によるデコードのスケジューリングを行うことができ、デコーダ22乃至デコーダ24は、符号化処理および復号処理の履歴情報を必要に応じて生成し、不完全に復号されたデータに対応付けて出力することができるようにしても良い。
更に、HDD16には、圧縮符号化されたストリームデータに対応付けて、更に、符号化処理および復号処理の履歴情報を記録するようにしても良く、CPU20は、圧縮符号化されたストリームデータのデコードのスケジューリングを、符号化処理および復号処理の履歴情報に基づいて行うようにしても良い。さらに、デコーダ22乃至デコーダ24が、CPU20の制御に基づいて、圧縮符号化されたストリームデータをデコードして、ベースバンド信号に変換することができるような場合においても、符号化処理および復号処理の履歴情報を必要に応じて生成し、ベースバンド信号に対応付けて出力することができるようにしても良い。
なお、上述の実施の形態においては、再生装置1が、それぞれ、複数のデコーダを有しているものとして説明したが、デコーダが、それぞれ、独立した装置として構成されている場合においても、本発明は適用可能である。
このとき、独立した装置として構成されているデコーダは、圧縮符号化データの供給を受けてこれを復号し、表示または出力するのみならず、上述した場合と同様にして、圧縮符号化データの供給を受け、中途段階まで部分的に復号して、符号化および復号の履歴情報とともに外部に出力したり、部分的に符号化されたデータの供給を受け、復号処理を行い、ベースバンド信号に変換して外部に出力したり、部分的に符号化されたデータの供給を受け、中途段階まで部分的に復号して、符号化および復号の履歴情報とともに外部に出力するようにしても良い。
さらに、上述の実施の形態においては、CPU11およびCPU20がそれぞれ別の形態で構成されているが、CPUの構成は、これに限らず、例えば、CPU11およびCPU20を、再生装置1全体を制御する1つのCPUとして構成する形態も考えられる。また、CPU11およびCPU20がそれぞれ独立して構成されている場合であっても、CPU11およびCPU20を1つのチップとして構成するようにしてもよい。
更に、CPU11およびCPU20がそれぞれ独立して構成されている場合、上述の実施の形態においてCPU11が実行した処理の少なくとも一部を、例えば、時分割で、CPU20が実行することができるようにしたり、CPU20が実行した処理の少なくとも一部を、例えば、時分割で、CPU11が実行することができるようにしてもよい。すなわち、CPU11およびCPU20には、分散処理が可能なプロセッサを用いるようにしても良い。
また、例えば、再生装置1をネットワークに接続可能な構成とし、上述の実施の形態において、CPU11またはCPU20が実行した処理の少なくとも一部を、ネットワークを介して接続されている他の装置のCPUにおいて実行させることができるようにしても良い。
同様に、上述の実施の形態においては、メモリ13およびメモリ21がそれぞれ別の形態で構成されているが、これに限らず、メモリ13およびメモリ21を、再生装置1において1つのメモリとして構成する形態も考えられる。
さらに、上述の実施の形態においては、HDD16、デコーダ22乃至デコーダ24、および、セレクタ25を、それぞれ、ブリッジおよびバスを介して接続し、再生装置として一体化されている場合について述べたが、本発明はこれに限らず、例えば、これらの構成要素のうちの一部が、外部から有線または無線で接続される場合や、これらの構成要素が、この他、種々の接続形態で相互に接続される場合にも適用することができる。
さらに、上述の実施の形態においては、圧縮されたストリームデータがHDDに記憶されている場合について述べたが、本発明はこれに限らず、例えば、光ディスク、光磁気ディスク、半導体メモリ、磁気ディスク等の種々の記録媒体に記録されたストリームデータに対して再生処理を行う場合にも適用することができる。
さらに、上述の実施の形態においては、CPU20、メモリ21、メモリ18、デコーダ22乃至デコーダ24、および、セレクタ25を、同一の拡張カード(例えば、PCIカード、PCI−Expressカード)に搭載する形態に限らず、例えばPCI−Expressなどの技術によりカード間の転送速度が高い場合には、これらの構成要素を、それぞれ別の拡張カードに搭載するようにしてもよい。
また、本発明は、例えば、H264/AVCなどの他の符号化方法においても適用可能であることはいうまでもない。
上述した一連の処理は、ソフトウェアにより実行することもできる。そのソフトウェアは、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。この場合、例えば、図1を用いて説明した再生装置1は、図51に示されるようなパーソナルコンピュータ201により構成される。
図51において、CPU(Central Processing Unit)211は、ROM(Read Only Memory)212に記憶されているプログラム、または記憶部218からRAM(Random Access Memory)213にロードされたプログラムにしたがって、各種の処理を実行する。RAM213にはまた、CPU211が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU211、ROM212、およびRAM213は、バス214を介して相互に接続されている。このバス214にはまた、入出力インタフェース215も接続されている。
入出力インタフェース215には、キーボード、マウスなどよりなる入力部216、ディスプレイやスピーカなどよりなる出力部217、ハードディスクなどより構成される記憶部218、モデム、ターミナルアダプタなどより構成される通信部219が接続されている。通信部219は、インターネットを含むネットワークを介しての通信処理を行う。
入出力インタフェース215にはまた、必要に応じてドライブ220が接続され、磁気ディスク231、光ディスク232、光磁気ディスク233、もしくは、半導体メモリ234などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部218にインストールされる。
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
この記録媒体は、図51に示されるように、装置本体とは別に、ユーザにプログラムを供給するために配布される、プログラムが記憶されている磁気ディスク231(フロッピディスクを含む)、光ディスク232(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク233(MD(Mini-Disk)(商標)を含む)、もしくは半導体メモリ234などよりなるパッケージメディアにより構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに供給される、プログラムが記憶されているROM212や、記憶部218に含まれるハードディスクなどで構成される。
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
1 再生装置, 11 CPU, 16 HDD, 20 CPU, 22乃至24 デコーダ, 25 セレクタ, 71 入力処理部, 72 アドレス管理テーブル, 73 エレメンタリストリームアドレス決定部, 74 メモリコントローラ, 75 入力バッファ, 76 コントロールバス, 77 デコード処理部, 78 書き込み画アドレス決定部, 79 参照画アドレス決定部, 80 出力アドレス決定部, 81 メモリコントローラ, 82 ビデオバンクメモリ