以下、本発明の実施形態を、図面を参照して説明する。
図1は、本発明の一実施の形態を示すビデオサーバの構成を示すブロック図である。
ビデオサーバ10は、映像入出力部11、入出力バッファ12、データ入出力制御部13、映像記憶部14、管理情報記憶部15、および、制御管理部16を有する。
映像入出力部11は、入出力バッファ12とデータラインで接続され、制御管理部16と制御ラインで接続される。映像入出力部11は、映像データの外部からの入力および映像データの外部への出力を行う。映像入出力部11は、入力処理の場合は、外部からファイル形式等の映像データを入力され、入力された映像データを入出力バッファ12へ出力する。映像入出力部は、外部から入力された映像データの区切り(映像分割単位)を検出し、その区切りを検出する毎またはその区切りまでの映像データを入出力バッファ12へ出力する毎にフレーム蓄積完了通知を制御管理部16へ出力する。この映像データの区切りは、1フレーム毎や、映像データがMPEG2(Moving Picture Experts Group phase 2)等の圧縮形式で圧縮されている場合は1GOP毎などである。このようなフレーム蓄積完了通知の出力動作は、後述する入出力バッファ12が行ってもよく、入出力バッファ12がフレーム蓄積完了通知の出力動作を行う場合は、映像入出力部11は、フレーム蓄積完了通知の出力動作を行わない。
また、映像入出力部11は、入出力バッファ12へ出力する映像データの容量をカウントし、後述する1ページ分(書込み単位)の容量をカウントする毎にページ蓄積完了通知を出力する。このページ蓄積完了通知の出力動作は、後述する入出力バッファ12が行ってもよく、入出力バッファ12がページ蓄積完了通知の出力動作を行う場合は、映像入出力部11は、ページ蓄積完了通知の出力動作を行わない。出力処理の場合は、映像入出力部11は、入出力バッファ12に蓄積される映像データを読出して外部へ出力する。映像入出力部11は、非圧縮の映像データが入力される場合には、エンコーダおよびデコーダを備えるようにしてもよい。
入出力バッファ12は、映像入出力部11およびデータ入出力制御部13とデータラインで接続され、制御管理部15と制御ラインで接続される。入出力バッファ12は、入力処理および出力処理の際に、一時的に映像データを蓄積する。入出力バッファ12は、入力処理の場合は、映像入出力部11から出力された映像データを、一時的に蓄積し、蓄積された映像データはデータ入出力制御部13によって読出される。入出力バッファ12は、出力処理の場合は、データ入出力制御部13が映像記憶部14から読出す映像データを一時的に蓄積し、蓄積された映像データは映像入出力部11によって読出される。
また、入出力バッファ12は、外部から入力された映像データの区切りを検出し、その区切りを検出する毎またはその区切りまでの映像データを入出力バッファ12へ出力する毎にフレーム蓄積完了通知を制御管理部16へ出力する。このようなフレーム蓄積完了通知の出力動作は、映像入出力部11が行ってもよく、映像入出力部11がフレーム蓄積完了通知の出力動作を行う場合は、入出力バッファ12は、フレーム蓄積完了通知の出力動作を行わない。また、入出力バッファ12は、映像入出力部11から入力される映像データの容量をカウントし、後述する1ページ分の容量をカウントする毎にページ蓄積完了通知を出力する。このページ蓄積完了通知の出力動作は、映像入出力部11が行ってもよく、映像入出力部11がページ蓄積完了通知の出力動作を行う場合は、入出力バッファ12は、ページ蓄積完了通知の出力動作を行わない。
データ入出力制御部13は、例えば、図示しないFPGA(Field Programmable Gate Array)で構成される。データ入出力制御部13は、入出力バッファ12および映像記憶部14とデータラインで接続され、制御管理部16と制御ラインで接続される。データ入出力制御部13は、映像データの映像記憶部14への書込みおよび映像記憶部14からの読出しを制御する。データ入出力制御部13は、入力処理の場合は、入出力バッファ12から映像データを読出して、制御管理部16より指示される映像記憶部14の記憶領域へ、読出した映像データを映像記憶部14へ記憶させる。データ入出力制御部13は、出力処理の場合は、制御管理部16より指示される映像記憶部14の記憶領域から映像データを読出し、読出した映像データを入出力バッファ12へ出力する。また、制御管理部16の指示によって、映像記憶部14に記憶されている映像データの消去処理を行う。
映像記憶部14は、不揮発性の半導体メモリであるフラッシュメモリで構成され、データ入出力制御部13とデータラインで接続される。本実施形態では、映像記憶部14は、NAND型のフラッシュメモリで構成される場合を説明する。映像記憶部14は、映像データをデータ入出力制御部13の入力(書込み)処理によって記憶され、データ入出力制御部13の出力(読出し)処理によって、記憶されている映像データが読出される。また、映像記憶部14は、データ入出力制御部13の消去処理によって、記憶されている映像データが消去される。
管理情報記憶部15は、不揮発性の半導体メモリであるフラッシュメモリで構成され、制御管理部16と制御ラインで接続される。本実施形態では、管理情報記憶部15は、NOR型のフラッシュメモリで構成される場合を説明する。管理情報記憶部15は、映像記憶部14に記憶される映像データの記憶位置等の情報や、映像記憶部14の書込みが可能な記憶領域の情報を、制御管理部16の動作によって記憶される。
ここで、図2を参照して、管理情報記憶部15が記憶する情報と、映像記憶部14の記憶領域との関係について説明する。図2(a)は、管理情報記憶部15が記憶する情報を示す。管理情報記憶部15は、映像データの記憶位置等の情報である映像ファイル管理情報151を記憶される。また、管理情報記憶部15は、どのページまで書込み済みであるかの情報であるページステータス情報(図示なし)を記憶される。このページステータス情報は、書込み中のブロックのどのページまで書込まれているのかを判断するために用いられ、入力処理の際に制御管理部16に参照される。さらに、管理情報記憶部15は、電源障害復旧時のエラーチェック範囲を狭めて復旧するまでの時間を短縮するために、映像データを書込み可能な記憶領域の情報である書込み予定ブロック情報152を記憶される。もし、この書込み予定ブロック情報152が記憶されていなければ、電源障害復旧時のエラーチェック範囲は、映像ファイル管理情報151を参照してもステータスが特定できないブロック全てに対してエラーチェックを行うことになり、復旧するまでに時間がかかるが、書込み予定ブロック情報152が記憶されていれば、ステータスが不定となる可能性のあるブロックが限定されるため、その限定されたブロックに対してエラーチェックを行えばよく、復旧するまでの時間が短縮される。この書込み予定ブロックは、映像データが記憶されているブロックを除く全てのブロックを並べて記憶するようにしてもよいし、並べたうちの直近の一定の記憶容量分のみの情報を記憶するようにしてもよい。
図2(b)は、映像記憶部14の記憶領域の構造を示す。図2(b)の最小格子は、書込み単位であるページを示し、7マス×7マスの四角は、消去単位であるブロックを示す。また、映像記憶部14は、複数のブロックBLにより構成される。左下斜線で表記される記憶領域は、映像データが記憶されている領域を示し、管理情報記憶部15に記憶される映像ファイル管理情報151は、この映像データが記憶されている領域の情報を示すものである。白塗りで表記される記憶領域は、映像データが記憶されていない領域を示し、管理情報記憶部15に記憶される書込み予定ブロック情報152は、この映像データが記憶されていない領域の情報を示すものである。この書込み予定ブロック情報は、次に書込む記憶領域(ブロックBL)を順番に並べられている。この順番は、例えば、書き換え回数の少ないブロックから書込むようにする等、記憶媒体の書き換え回数に起因する使用寿命を延ばすためのウェアレベリングにより決められる。
図2(c)は、図2(b)のブロックのうち、書込み済みのページのうちの最後のページPGを拡大して示したものである。ページPGは、各ページの最後のバイトをページステータス領域PGSTとして使用する。このページステータスは、このページPGの書込みが完了する場合に、図3に示すように、「書込み完了」としてページPGの最後のバイトへ「0x00」を書込むことで、制御管理部16の指示に基づきデータ入出力制御部13によって「書込み完了」というページの状況が判断できる。また、書込み完了の後に、ブロックを消去した場合には、各ページの最後のバイトは、「0xFF」となり、この「0xFF」を「未使用」として扱う。このようすることで、各ページの状況が、「書込み完了」または「未使用」を判断することができる。なお、実際には、NAND型フラッシュメモリにおいては、ページに対してのエラー訂正が行われる。そのため、ページ毎に正しく書込みが完了しているかの判断は、ページステータスとエラー訂正とを組み合わせて判断するようにしてもよい。
また、ここで図4を参照して、映像ファイル管理情報151の記憶内容について説明する。映像ファイル管理情報151には、ファイル名、ファイルステータス、データ長、フレーム数、および、フレーム毎のフレーム情報が記述される。この映像ファイル管理情報151は、ファイル毎の管理情報が含まれる。図4の例では、ファイル名が「映像1」であるファイルのみ管理情報が記載されているが、他のファイルについても、管理情報を記載することができるようになっている。
映像ファイル管理情報151に記載される記憶ファイルステータスは、このファイルが書込み中であるか、書込み完了であるか、書込み未であるかを、書込み中フラグおよび書込み完了フラグを用いて表記される。フレーム毎のフレーム情報は、フレーム番号、フレームデータ数、ページアドレス、およびフレームステータスが記述される。ページアドレスは、このフレームが書込まれる先頭のページアドレスを示し、フレームステータスは、ファイルステータスと同様に、フレームが書込み中であるか、書込み完了であるか、書込み未であるかを、書込み中フラグおよび書込み完了フラグを用いて表記される。これらのステータスは、書込みを開始する場合に、書込み中フラグを0にし、書込み完了した場合に書込み完了フラグを0にする。すなわち、書込み未の場合は、書込み中フラグおよび書込み完了フラグがともに1で、書込み中の場合は、書込み中フラグが0で書込み完了フラグが1、書込み完了の場合は、書込み中フラグおよび書込み完了フラグがともに0となる。
このフラグの表記の仕方は、1から0に限り1ビット単位で書き換え(上書き)が可能であるというNOR型フラッシュメモリの特性に着目したものである。NOR型を含むフラッシュメモリの書き換え回数は、消去を行った回数でカウントされるため、フレームステータスの更新によってNOR型フラッシュメモリの書き換え回数がカウントされることがないことから、NOR型フラッシュメモリの寿命を延ばすことができる。また、このフラグを表記するためのデータ量が小さいため、管理情報記憶部15へ記憶する容量の節約ができる。
なお、図4では、映像ファイルの管理情報として、フレーム単位で管理する場合としてフレーム毎のフレーム情報を記述する例を示したが、管理単位として、GOP単位を用いる場合は、フレーム情報をGOP情報と読み替えることで適用可能である。
ここで、図5を参照して、書込み予定ブロック情報152の記憶内容について説明する。書込み予定ブロック情報152には、ブロック毎のブロックアドレスおよび利用ステータスが記述される。ブロックの利用ステータス(ブロックステータス)は、映像ファイル管理情報151に記述されるファイルステータスおよびフレームステータスと同様に、書込み中フラグおよび書込み完了フラグを用いて表記される。ステータスの表記の仕方については、図4と同様であるため説明を省略する。このブロックステータスは、書込み完了となった場合、書込み予定ブロック情報152からは削除される。
ここからは、引き続き図1を参照して説明する。
制御管理部16は、図示しないCPU、プログラムメモリ、およびワークメモリを備えるとともに、ビデオサーバ10内の各部と制御ラインで接続され、ビデオサーバ10の動作全体を制御する。制御管理部16は、図6に示すように、管理情報更新手段161、書込み指示手段162、ステータス判断手段163、およびステータス整合手段164を備えている。これらの各部の機能は、CPUがプログラムメモリに予め記憶される所定のプログラムを実行することにより実現され得る。
管理情報更新手段161は、管理情報記憶部15に記憶される映像ファイル管理情報151および書込み予定ブロック情報152を、映像記憶部14に対する映像データの記憶や消去に応じて更新する。管理情報更新手段161は、映像ファイル管理情報151に含まれるフレーム情報を、フレーム毎の書込み開始および書込み終了のタイミングで更新し、書込み予定ブロック情報152の更新は、ブロック毎の書込み開始および書込み終了のタイミングで行う。もしくは、フレーム情報は、ページ単位での書込み開始および書込み終了のタイミングで更新してもよい。
指示手段162は、映像データを映像記憶部14へ書込む際に、データ入出力制御部13に対して書込む記憶領域を通知して、書込み指示を行う。本実施形態では、映像記憶部14がNAND型フラッシュメモリで構成されているため、データ入出力制御部13に対して、書込むブロックおよびページを通知する。どのブロックに書込むかは、管理情報記憶部15に記憶される書込み予定ブロック情報152を参照して判断する。
また、指示手段162は、映像データを映像記憶部14から読出す際に、データ入出力制御部13に対して読み出す記憶領域を通知して、読出し指示を行う。本実施形態では、映像記憶部14がNAND型フラッシュメモリで構成されているため、データ入出力制御部13に対して、読出すページアドレスを通知する。
ステータス判断手段163は、ビデオサーバ10に電源障害が発生した場合に、再起動の際に、書込み済みの範囲を特定するために映像ファイル管理情報151のファイルステータスおよびフレーム情報を参照して、電源障害発生直前に、どこまでが書込み済みかを判断する。また、入力処理の際には、どこまで書込み済みの記憶領域かを特定するために、書込み予定ブロック情報152を参照して、ブロックのステータスを判断したり、ブロックのうちのどのページまで書込み完了かを特定したりするために、管理情報記憶部15に記憶されるページステータス情報(図示なし)を参照する。
ステータス整合手段164は、ステータス判断手段163によって、書込み中と判断されたフレームがあった場合、そのフレームの書込みページアドレスから書込み中の対象ブロックを計算で求める。このブロックは、書込みが完了していないブロックであるため、書込み予定ブロック情報152にそのステータスが記述されている。ステータス整合手段164は、この書込み中であるブロックのステータスを書込み完了に更新する。このように、電源障害後に再起動した際に書込み中のブロックのステータスを書込み完了とすることで、書込んだ映像データの再書込みを行うという処理を省くことが可能となる。
また、ステータス整合手段164は、書込み予定ブロック情報152の予定順の中から、上記で書込み中と算出されたブロックの次に使用が予定されているブロックを消去し、未使用状態にする。すなわち、書込み中フラグおよび書込み完了フラグはともに1になる。このようにすることで、電源障害発生のタイミング等により書込み中か未使用かが不定となるブロックステータスを、実際のブロックステータスと書込み予定ブロック情報152のステータスとの整合をとることができる。
次に、図7乃至図9を参照して、ビデオサーバの処理動作を説明する。
図7は、映像データの入力処理を示すフローチャートである。映像データの入力処理は、外部からの入力コマンドが投入されること等を契機に開始される。
まず、映像入出力部11から映像データが入力され、入力された映像データは入出力バッファ12に蓄積される(ステップS101)。制御管理部16は、1ページ分のデータが蓄積されたか否かを判断する(ステップS102)。この判断は、映像入出力部11または入出力バッファ12からのページ蓄積完了通知の受信の有無によって判断する。ページ蓄積完了通知が受信されるまで待機する(ステップS102でNO)。制御管理部16でページ蓄積完了通知が受信されると(ステップS102でYES)、制御管理部16は、管理情報記憶部15の書込み予定ブロック情報152を参照して、書込み中のブロックがあるか否かを判断する(ステップS103)。
書込み中のブロックがある場合(ステップS103でYES)は、書込み中のブロックに未使用のページがあるか否かを判断する(ステップS104)。ページが未使用か否かは、管理情報記憶部15に記憶されるページステータス情報を参照することで判断する。書込み中のブロックに未使用のページがある場合(ステップS104)は、フレームを書込むページアドレスを計算で求める(ステップS106)。
一方、ステップS103で、書込み中のブロックがない場合(ステップS103でNO)およびステップS104で書込み中のブロックに未使用のページがない場合(ステップS104でNO)は、制御管理部16は、書込み予定ブロック情報152のうちの次に使用するブロックのステータスを書込み中に更新する(ステップS105)。そして、フレームを書込むページアドレスを算出する(ステップS106)。
次に、制御管理部16は、映像ファイル管理情報151の当該フレーム情報のステータスを、書込み中として記憶させる(ステップS107)。フレーム情報のステータスを書込み中として記憶させた後に、入出力バッファ12から映像記憶部14のページへデータを書込むように、制御管理部16はデータ入出力制御部13へ書込み指示を行う(ステップS108)。
そして、制御管理部16は、映像ファイル管理情報151の当該フレーム情報のステータスを書込み完了に更新する(ステップS109)。なお、このときのフレームデータは、1ページの容量とは異なるが、ページ単位での書込みが終了した時点で書込み済みのフレームまでを書込み完了に更新する。次にフレームが続くか否かを判断するため、最後のフレームか否かを判断する(ステップS110)。最後のフレームでなければ(ステップS110でNO)、次のフレームの処理を継続するためにステップS102へ進む。最後のフレームなら(ステップS110でYES)、入力処理を終了する。
図8は、映像データの出力処理を示すフローチャートである。映像データの出力処理は、外部からの出力コマンドが投入されること等を契機に開始される。
まず、制御管理部16は、出力する映像データのフレームの情報を、映像ファイル管理情報151を参照して得る(ステップS201)。制御管理部16は、データ入出力制御部13に対して、出力するフレームのページアドレスを指定して入出力バッファ12への読出しを指示する(ステップS202)。読出しを指示されたデータ入出力制御部13は、指定されたページアドレスから映像データを読出して入出力バッファ12へ出力する。そして、映像入出力部11は、入出力バッファ12から映像データを読出し、読出した映像データを外部へ出力する(ステップS203)。次にフレームが続くか否かを判断するため、最後のフレームか否かを判断する(ステップS204)。最後のフレームでなければ(ステップS204でNO)、次のフレームの処理を継続するためにステップS201へ進む。最後のフレームなら(ステップS204でYES)、出力処理を終了する。
図9は、電源障害が発生した場合の再起動処理を示すフローチャートである。再起動処理は、外部からのコマンド投入なしに電源が切断された場合に、再度電源が投入されたこと等を契機に開始される。
まず、制御管理部16は、映像ファイル管理情報151を参照して、映像ファイル管理情報151に記述されるファイルの管理情報のうち、ファイルステータスが書込み中のファイルがないか確認し(ステップS301)、ファイルステータスが書込み中のものがあるか否かを判断する(ステップS302)。ファイルステータスが書込み中のものがない場合(ステップS302でNO)、起動時のチェックを完了し、通常の初期化処理へ進む。ファイルステータスが書込み中のものがある場合(ステップS302でYES)、ステップS303へ進む。
制御管理部16は、引き続き映像ファイル管理情報151を参照して、ステータスが書込み中のファイルについて、書込み中ステータスのフレームがないか確認し(ステップS303)、フレームステータスが書込み中のものがあるか否かを判断する(ステップS304)。書込み中ステータスのフレームがない場合(ステップS304でNO)、書込み予定ブロック情報152から、最後端の書込み中ブロックまたは最後端の書込み完了ブロックを検索し(ステップS306)、ステップS307へ進む。ステップS304において、書込み中ステータスのフレームがある場合(ステップS304でYES)、そのフレームの書込みページアドレス情報から、書込み中対象のブロックを計算で求め(ステップS305)、ステップS307へ進む。
ステップS307では、ステップS305又はステップS306で得られたブロックに続く、書込み予定ブロックを消去する(ステップS307)。このステップにより、次のブロックへの書込みが開始されているにも関わらず書込み中ステータスの更新が反映されていないという不整合状態を解消することができる。この書込み予定ブロックの消去は、1つのブロックでも複数のブロックでも、または書込み予定ブロックの全てに対して行ってもよい。
そして、ステップS305又はステップS306で得られたブロックのうち、書込み中ステータスのブロックは、そのブロックのステータスを書込み完了に更新する(ステップS308)。これは、書込み途中のブロックのどのページまで書込まれたかが不定であるために、次に書込みを開始するページが特定できないため、このブロックへの書込みをせず、そのブロックのステータスを書込み完了に更新するようにしている。
次に、制御管理部16は、映像ファイル管理情報151のうち、ステップS304で判断した書込み中ステータスのフレーム情報を書込み完了に更新する(ステップS309)。なお、ステップS309で書込み中ステータスのフレーム情報を書込み完了に更新する際、当該フレームが書き込まれているページPGへ正しく書込まれているかを確認するために、ページPGの最後のバイトに書込まれるページステータスを参照し、ページステータスが「書込み完了」となっている場合に、フレーム情報を書込み完了に更新するようにしてもよい。このようにすれば、フレーム情報が書込み完了のものは、正しく書き込まれているデータであることが保証される。このように、ステップS309によって、このフレームを読出すことが可能となる。そして、起動時のチェックを完了し、通常の初期化処理へ進む。
このような処理により、電源障害発生により生じる不整合状態を解消し、既に書込みされている映像データを保護した上で、ビデオサーバの復旧を行うことができる。なお、図9を参照して説明した不整合状態の解消のための処理は、再起動時だけでなく、通常の起動時にも行うようにしてもよい。
以上のように、映像記憶部14に記憶される映像データ(映像ファイル)の管理を、映像データの例えばフレーム毎等の映像分割単位毎の書込み状態を示すステータスを含む、映像データの管理情報を記憶し、管理情報を参照して映像分割単位毎にステータスが書込み中か否かを判断し、そのステータスが書込み中と判断された場合、その映像分割単位のステータスを書込み完了に更新し、次に書込む予定のブロックに対しては、ブロック消去を行うようにしている。したがって、電源障害によって、書込み済みの範囲とその範囲を管理するデータとの不整合が発生した場合に、書込み済みの範囲とその範囲を管理するデータとの整合をとることができ、ビデオサーバに適応した復旧処理が可能となる。
また、書込み済みの範囲とその範囲を管理するデータとの不整合を解消する場合に、書込みが途中のブロックのステータスを、書込み完了として更新し、このブロックに書込まれるフレームのステータスを書込み完了として更新することにより、電源障害が発生する直前までに書込み済みの映像データを保護することができる。
さらに、映像ファイル管理情報151は、フレーム単位、またはGOP単位などの映像データに適応した単位で管理情報を記憶するようにしているため、実際に映像データを出力する場合にフレームやGOPを指定する処理などにおいて、映像データへよりアクセスしやすくなる。
そして、管理情報記憶部15は、映像データを管理するための情報として、映像データのステータスを管理する映像ファイル管理情報151に加えて、書込み予定ブロック情報152も記憶することにより、電源障害発生から復旧までの間に行う記憶領域のチェック時間を短縮することが可能である。
その他、映像を記憶する映像記憶部14と、映像データの管理情報を記憶する管理情報記憶部15とを別の記憶媒体により構成し、管理情報記憶部15をNOR型フラッシュメモリで構成することにより、管理情報のステータスを更新する際に、書き換え回数にカウントされないため、書き換え回数の制限による記憶媒体の寿命を延ばすことができる。
なお、本発明の実施形態は、以上の構成に限定されるものではなく、種々の変形が可能である。本実施形態では、映像記憶部14に記憶する映像データをフレーム単位で管理する例を説明したが、GOP単位で管理する場合には、図7乃至図9中の「フレーム」を「GOP」と、読み替えることで適用が可能であり、その他の単位で管理する場合についても、図7乃至図9中の「フレーム」を該当する単位の名称に読み替えることができる。