以下、図面を参照して本発明の好適な実施形態について詳細に説明する。なお、本発明は以下の実施形態に限定されるものではなく、本発明の実施に有利な具体例を示すにすぎない。また、以下の実施形態の中で説明されている特徴の組み合わせの全てが本発明の課題解決のために必須のものであるとは限らない。
図1は本発明の実施形態における記録再生装置の一例であるビデオカメラ100の構成を示すブロック図である。図1において、撮像部101は被写体を撮影して動画信号を出力する。バッファメモリ102はビデオカメラ100の各部で処理される動画信号を記憶するためのメモリである。信号処理部103は、記録時においては、撮影された動画信号に対してMPEG等の公知の符号化処理を施して圧縮する他、必要な処理を施す。また、信号処理部103は、再生時においては、再生された動画信号を復号する他、必要な処理を施す。表示制御部104は、撮影時には撮影された動画信号による動画像を表示部105に表示し、再生時には再生された動画信号による動画像を表示部105に表示する。また、表示制御部104は、CPU107からの指示により、メニュー画面や各種の必要な情報を表示部105に表示する。表示部105は、液晶パネルとその駆動回路等を含み、動画像や各種の情報を表示する。出力部106は、撮像部101により撮影された動画信号や再生された動画信号を外部の表示装置などに出力する。
CPU107は操作部108から受け付けた指示に従い、ビデオカメラ100の各部を制御する。操作部108は、電源ボタンやモード切り替えボタン、メニューボタンなど、各種の操作スイッチを備えている。ユーザは操作部108を操作することにより、動画の撮影や再生、削除等を指示する。管理情報メモリ109は、後述のように、記録媒体113から読み出した管理情報を一時的に記憶するメモリである。ファイルシステム部110は、記録媒体113に記録するデータを管理する。転送制御部111は、CPU107或いはファイルシステム部110からの指示に従い、記録媒体制御部112に対して記録すべきデータを送信すると共に、記録媒体制御部112から読み出されたデータを各部に出力する。記録媒体制御部112は、CPU107或いはファイルシステム部110からの指示に従い、記録媒体113に対して管理情報やデータを書き込み、また、読み出す。本実施形態では、記録媒体制御部112はATA等の公知のインターフェイスに従い、コマンドやデータを送受信する。記録媒体113は、フラッシュメモリなどのランダムアクセス記録媒体である。なお、本実施形態においては、記録媒体113はフラッシュメモリカードであり、不図示の装着、排出機構により、ビデオカメラ100に対して記録媒体113が自由に装着、排出できるものとする。バス114は、各部の間で動画信号や各種の必要なデータを送受信する。
次に、ビデオカメラ100における記録再生処理について説明する。
まず、記録時の処理を説明する。ユーザが操作部108を操作してビデオカメラ100の電源を投入すると、CPU107はビデオカメラ100を撮影モードに設定し、撮像部101に対して動画の撮影を開始するよう指示する。撮像部101は動画信号を出力し、バッファメモリ102に順次記憶する。また、CPU107は、表示制御部104に対し、バッファメモリ102から動画信号を読み出して、表示部105に表示させる。このような撮影待機状態において、ユーザが操作部108を操作して記録開始を指示すると、CPU107は、信号処理部103に対して動画信号の符号化処理を実行させる。信号処理部103は、バッファメモリ102から動画信号を読み出して符号化し、再びバッファメモリ102に記憶する。
CPU107は、バッファメモリ102に記憶された、符号化動画信号のデータ量を監視している。ここで、所定量の符号化動画信号がバッファメモリ102に記憶されると、ファイルシステム部110及び記録媒体制御部112に対して、バッファメモリ102から符号化動画信号を読み出して記録するよう指示する。本実施形態では、記録媒体113に対して記録可能なデータレートは、符号化動画信号のデータレートよりも大きい。そのため、記録媒体制御部112により符号化動画信号の記録を開始した後、バッファメモリ102に記憶された符号化動画信号のデータ量が閾値以下となると、いったん記録媒体113に対する符号化動画信号の書き込みを停止する。その後、再度所定量の符号化動画信号がバッファメモリ102に記憶されると、記録媒体113に対する書き込みを開始する。このように、記録媒体113に対して間欠的に動画信号を記録する。そして、操作部108により記録停止の指示があると、CPU107は、ファイルシステム部110と記録媒体制御部112に対して動画信号の記録停止を指示すると共に、信号処理部103による符号化処理を停止する。本実施形態では、ファイルシステム部110が、記録開始から記録停止までの間に記録された動画信号を一つのファイルとして管理する。記録時におけるファイルシステム部110の処理については後述する。
次に、再生時の処理を説明する。ユーザが操作部108を操作して、再生モードを指示すると、CPU107はビデオカメラ100を再生モードに設定する。そして、ファイルシステム部110と記録媒体制御部112に対して、記録媒体113に記録された動画ファイルのうち、指定された動画ファイルを再生させ、動画信号をバッファメモリ102に蓄積させる。そして、信号処理部103は、再生された動画信号をバッファメモリ102に蓄積から読み出して復号し、再度、バッファメモリ102に蓄積する。表示制御部104は、バッファメモリ102に蓄積された動画信号を読み出して、表示部105に表示する。操作部108から再生停止の指示があると、CPU107はファイルシステム部110と記録媒体制御部112に対して、再生停止を指示し、記録媒体制御部112は動画ファイルの再生を停止する。再生時におけるファイルシステム部110の処理については後述する。
次に、ファイルシステム部110について説明する。本実施形態では、ファイルシステム部110は、FAT16やFAT32などのファイルシステムに従い、記録媒体113に記録したファイルを管理する。ファイルシステム部110は、管理するデータをファイルという論理単位で管理し、記録媒体113は所定数のビットで構成される複数のクラスタを有する。従って、ファイルシステム部110は、記録媒体113上での記録位置(アドレス)については、クラスタ単位で管理する。
また、ファイルシステム部110は、管理情報を用いて記録媒体113に記録されたファイルを管理する。管理情報は、図2(a)に示すように、ディレクトリ情報201と管理テーブル202とを含む。
ファイルシステム部110は、ファイルをディレクトリという階層型のデータ構造で管理する。各ディレクトリには、更に別のディレクトリとファイルとを格納することができる。ファイルシステム部110は、ディレクトリ、或いはファイル毎にディレクトリエントリを生成する。各ディレクトリエントリには、ファイル名、ディレクトリ名やファイルサイズ、位置情報などを含む。位置情報には、ファイルの先頭クラスタ番号、ディレクトリに格納されたファイルやディレクトリのディレクトリエントリが記録されたクラスタ番号が記述されている。ファイルシステム部110は、最上位のディレクトリエントリから辿っていくことで、記録媒体113におけるディレクトリの構成や、各ディレクトリに格納されるファイルを検出することができる。また、最上位の階層に位置するディレクトリはルートディレクトリと呼ばれ、ルートディレクトリのエントリ情報は記録媒体113上の特定の位置に記録される。
また、ファイルシステム部110は、記録媒体113の全てのクラスタの使用状態を表す管理テーブルを作成する。管理テーブルは複数の管理テーブルエントリを含む。各管理テーブルエントリは1クラスタに対応しており、一つの管理テーブルエントリが所定数のビットで表現される(例えばFAT32では32ビット)。そして、空きクラスタの管理テーブルエントリには、未使用を示す所定値が記述される。また、データが記録されているクラスタの管理テーブルエントリには、ファイル内で次のデータが記録されたクラスタの番号が記述される。また、ファイルを構成する最後のデータが記録されたクラスタに対応した管理テーブルエントリには、ファイルの最終クラスタを示す所定値が記述される。このようにして一つのファイルを表す管理テーブル上のクラスタの連なりをクラスタチェーンという。また、各クラスタ番号に対応した管理テーブルエントリは、記録媒体113における決められた位置に、クラスタ順に記録される。
次に、記録再生に伴うファイルシステム部110の処理について説明する。まず、再生時の処理について説明する。ファイルシステム部110は、CPU107から指定されたファイルの読み出し要求があった場合、まずルートディレクトリのディレクトリエントリが記録されたクラスタからデータを読み出すよう記録媒体制御部112に指示する。記録媒体制御部112は、記録媒体113の指定されたクラスタからルートディレクトリのディレクトリエントリデータを読み出し、転送制御部111に送る。転送制御部111は、読み出されたルートディレクトリのディレクトリエントリデータを管理情報メモリ109に記憶する。ただし、既に同じディレクトリエントリのデータが管理情報メモリ109に格納されていた場合、記録媒体113からデータを読み出す必要はない。
次に、ファイルシステム部110は、管理情報メモリ109に格納されたディレクトリエントリの情報に基づき、下の階層のディレクトリのディレクトリエントリを記録媒体113から読み出させ、管理情報メモリ109に格納させる。このように、ファイルシステム部110は、指定されたファイルのディレクトリエントリが管理情報メモリ109に格納されるまで、ディレクトリ情報の読み出し処理を繰り返す。
そして、指定されたファイルのディレクトリエントリのデータが管理情報メモリ109に格納されると、ファイルシステム部110は、ディレクトリエントリに記述されたファイルの先頭クラスタ番号を検出する。そして、ファイルシステム部110は、検出したクラスタ番号のクラスタから管理テーブルエントリのデータを読み出すよう記録媒体制御部112に指示する。記録媒体制御部112は指定されたクラスタから管理テーブルエントリを読み出し、転送制御部111に送る。転送制御部111は、読み出された管理テーブルエントリのデータを管理情報メモリ109に格納する。但し、既に同じ管理テーブルエントリが管理情報メモリ109に格納されていた場合、記録媒体113から読み出す必要はない。
また、ファイルシステム部110は、ファイルの先頭クラスタを検出すると、クラスタを論理ブロックアドレス(LBA)に変換し、セクタ単位でファイルの実データ、ここでは動画信号を読み出すよう、記録媒体制御部112に指示する。ここで、セクタは、クラスタよりさらに小さい単位であり、複数のセクタにより一つのクラスタが構成される。そして、ファイルシステム部110は、LBAによりアクセスすべきセクタを指定する。記録媒体制御部112は、指定されたセクタからデータを読み出し、転送制御部111に送る。転送制御部111は、読み出されたデータ(動画信号)をバッファメモリ102に記憶する。再生された動画信号がバッファメモリ102に記憶されると、CPU107は、信号処理部103に対して再生された動画信号を復号するよう指示し、前述のように動画信号を復号する。
このように、先頭のクラスタからの動画信号の読み出しを開始すると、次に、ファイルシステム部110は、管理情報メモリ109に格納された先頭クラスタの管理テーブルエントリによって、ファイルを構成する次のクラスタ番号を検出する。そして、次のクラスタ番号の管理テーブルエントリが管理情報メモリ109に格納されていない場合、ファイルシステム部110は、次のクラスタ番号の管理テーブルエントリを読み出すよう記録媒体制御部112に指示する。記録媒体制御部112は指定されたクラスタ番号の管理テーブルエントリを読み出し、転送制御部111に送る。転送制御部111は、読み出された管理テーブルエントリを管理情報メモリ109に記憶する。この際、既に動画信号の読み出しを開始したクラスタに関する管理テーブルエントリを管理情報メモリ109に残しておいてもよい。或いは、管理情報メモリ109の空き領域が無い場合には、先に記憶された管理テーブルエントリを消去してから、新たに読み出した管理テーブルエントリを記憶するようにしてもよい。
このように、順次管理テーブルエントリを読み出しながら、動画信号の読み出しを続ける。そして、CPU107が操作部108から再生停止の指示があるか、或いは、ファイルシステム部110により、ファイルの最終クラスタのデータの読み出しが終了すると、CPU107は記録媒体制御部112に対して再生停止を指示する。
次に記録時の処理について説明する。操作部108により記録開始の指示があると、CPU107はファイルシステム部110に対して動画の記録開始を指示する。ファイルシステム部110は、記録指示があると、新たに記録する動画ファイルを格納するためのディレクトリを指定する。そして、このディレクトリに関するディレクトリエントリのデータを読み出すよう、記録媒体制御部112に指示する。記録媒体制御部112は、前述のように、指定されたディレクトリのディレクトリエントリを記録媒体113から読み出す。読み出されたディレクトリエントリのデータが転送制御部111により管理情報メモリ109に記憶される。また、ファイルシステム部110は、新たに記録する動画ファイルのディレクトリエントリを作成し、管理情報メモリ109に記憶する。
次に、ファイルシステム部110は、管理テーブルのうち、空きクラスタとなっているクラスタの一つをファイルの先頭クラスタに指定する。そして、指定したクラスタの管理テーブルエントリを読み出すように記録媒体制御部112に指示する。記録媒体制御部112は、指定された空きクラスタの管理テーブルエントリを読み出し、転送制御部111に送る。転送制御部111は読み出された管理テーブルエントリを管理情報メモリ109に記憶する。ファイルシステム部110は、ファイルの先頭クラスタのクラスタ番号を、管理情報メモリ109に記憶されたディレクトリエントリに記述する。
CPU107から、前述のように符号化された動画信号の書き込み要求があると、ファイルシステム部110は、転送制御部111に対してバッファメモリ102から記録媒体113に対して動画信号を転送させる。そして、ファイルシステム部110は記録媒体113の空きクラスタに対して動画信号を書き込むよう、記録媒体制御部112に指示する。
一つのクラスタに対する動画信号の書き込みが完了すると、ファイルシステム部110は、次の空きクラスタを検出して、その管理テーブルエントリを管理情報メモリ109に記憶させる。そして、同じように、空きクラスタに対して動画信号を記録させる。また、ファイルシステム部110は、動画信号の書き込みに従い、管理情報メモリ109に記憶された各クラスタの管理テーブルエントリに対して、次のクラスタ番号を記述していく。
このように、記録媒体113に対して順次、動画信号の書き込みが行われる。動画信号の記録中にCPU107から管理情報の更新指示があると、ファイルシステム部110は、その時点で管理情報メモリ109に記憶されているディレクトリ情報と管理テーブルとを記録媒体113に記録するよう、記録媒体制御部112に指示する。転送制御部111は、ファイルシステム部110からの更新指示に従って管理情報メモリ109に記憶されたディレクトリ情報と管理テーブルとを読み出し、記録媒体制御部112送信する。記録媒体制御部112は、ディレクトリ情報と管理テーブルとを、それぞれ記録媒体113の決められたセクタに記録することにより、その時点までに記録された動画ファイルに関する管理情報を更新する。本実施形態では、動画信号の記録開始後、一定の時間間隔でCPU107が管理情報の更新を指示している。
このように、記録媒体113の管理情報が更新されると、その時点までに管理情報メモリ109に記憶されていた管理テーブルの記憶領域を空き領域として、新たに記録媒体113から読み出した管理テーブルを記憶するために用いる。また、ディレクトリ情報については、一つの動画ファイルの書き込みが完了するまで、管理情報メモリ109に保持しておく。
そして、操作部108より記録停止の指示があると、CPU107はファイルシステム部110と記録媒体制御部112に対して、動画信号の記録停止を指示する。ファイルシステム部110は、記録停止の指示に応じて、バッファメモリ102から記録媒体制御部112に対する動画信号の送信を停止させる。そして、記録媒体制御部112は、記録媒体113に対する動画信号の記録を停止する。
ファイルシステム部110は、動画信号の記録が停止すると、管理情報メモリ109に記憶された、動画ファイルの最後のクラスタの管理テーブルエントリに対し、ファイル末尾を示す値を記述する。また、ファイルシステム部110は、記録された動画ファイルのサイズを検出し、管理情報メモリ109に記憶されたディレクトリエントリに対してファイルのサイズを記述する。そして、ファイルシステム部110は、管理情報メモリ109に記憶されたディレクトリ情報と管理テーブルとを記録媒体113に記録するよう、記録媒体制御部112に指示する。転送制御部111は、ファイルシステム部110からの更新指示に従って管理情報メモリ109に記憶されたディレクトリ情報と管理テーブルとを読み出し、記録媒体制御部112送信する。記録媒体制御部112は、ディレクトリ情報と管理テーブルとを、それぞれ記録媒体113の決められたセクタに記録することにより、今回の記録指示によって記録された動画ファイルに関する管理情報を更新する。
また、ファイルシステム部110は、記録中の動画ファイルのサイズを監視している。そして、記録中の動画ファイルのサイズがファイルシステムにより規定された上限のサイズに近くなると、ファイルシステム部110は記録中のファイルを一旦クローズし、新たにファイルを作成して動画信号の記録を続ける。ファイルクローズ時には、記録停止時と同様に、管理情報メモリ109に記憶されたディレクトリ情報と管理テーブルを変更し、記録媒体113に書き込む。また、新たなファイルの作成については、記録開始時と同様に、新たにディレクトリエントリを作成し、管理情報メモリ109に記憶する。
このように、本実施形態のビデオカメラ100で記録可能な動画ファイルの最大のサイズは、ファイルシステムにより規定された上限のサイズとなる。前述のように、ファイルのサイズが大きくなるのに比例して、このファイルに関する管理テーブルのサイズも大きくなる。しかし、ファイルの記録時には、一定の時間間隔で記録媒体113上の管理テーブルを更新しているので、更新後は管理情報メモリ109における記憶領域を空き領域として使うことができる。また、再生時には、読み出し対象となるクラスタに関する管理テーブルエントリだけを管理情報メモリ109に記憶すればよい。このように、動画の記録再生のために、上限サイズの動画ファイルの管理テーブルを全て管理情報メモリ109に記憶する必要はない。そのため、本実施形態では、管理情報メモリ109の記憶容量を、上限サイズの動画ファイルの管理テーブルのサイズよりも小さい、記録再生処理のために必要なサイズとしている。
次に、ファイルの削除動作について説明する。図3はファイル削除処理を示すフローチャートである。なお、以下に説明するファイル削除処理は、CPU107が各部を制御することにより実行される。ユーザが操作部108を操作して、記録媒体113に記録された動画ファイルの一覧表示を指示すると、CPU107はファイルシステム部110に対して、ファイル一覧情報の取得を指示する。ファイルシステム部110は、記録媒体制御部112に対して、記録媒体113に記録された全てのファイルのディレクトリエントリを読み出すよう指示する。そして、記録媒体制御部112より読み出された各ファイルのディレクトリエントリが管理情報メモリ109に記憶されると、CPU107は各ファイルのファイル名の情報を示す一覧画面を表示制御部104により表示部105に表示させる。ユーザは、操作部108を操作して、表示された一覧画面から、削除対象のファイルを指定し、ファイルの削除を指示する。
このファイルの削除指示に応じて、図3のフローが開始する。まず、ファイルシステム部110は、削除指示に係るファイル(削除対象ファイル)に関するディレクトリ情報を読み出すよう、記録媒体制御部112に指示する(S301)。ここでは、削除対象ファイルのディレクトリエントリと、削除対象ファイルが格納されている全ての階層のディレクトリに関するディレクトリエントリを読み出す。ただし、既にこのファイルに関するディレクトリエントリが管理情報メモリ109に記憶されていた場合は、読み出す必要はない。
前述のように、ファイルの一覧画面からユーザが削除対象ファイルを指定した場合には、指定されたファイルのディレクトリエントリは既に管理情報メモリ109に記憶されているので、これ以外のディレクトリ情報を管理情報メモリ109から消去する。そして、新たに、削除対象ファイルが格納されている全ての階層のディレクトリに関するディレクトリエントリを読み出す。
次に、ファイルシステム部110は、管理情報メモリ109に記憶された削除対象ファイルのディレクトリエントリに基づいて、削除対象ファイルのファイルサイズを検出する。そして、ファイルシステム部110は、削除対象ファイルのファイルサイズに基づいて、このファイルの管理テーブルのサイズを検出して、CPU107に知らせる(S302)。具体的には、ファイルシステム部110は、ファイルサイズと1クラスタあたりのサイズに基づいてこのファイルに関する管理テーブルエントリの数を求める。そして、管理テーブルエントリの数に一つの管理テーブルエントリのビット数を乗算することで、管理テーブルのサイズを算出する。
上述のように、現在、削除対象ファイルのディレクトリ情報が管理情報メモリ109に記憶されている。この状態で、削除対象ファイルに関する管理テーブルを全て管理情報メモリ109に記憶することができるかを判定する。そのためにCPU107は、削除対象ファイルに関するディレクトリ情報のサイズと管理テーブルのサイズの合計と、管理情報メモリ109の容量とを比較する。そして、合計サイズが管理情報メモリ109の容量以下であるかどうかを判別する(S303)。
判別の結果、合計サイズが管理情報メモリ109の容量以下である場合、ファイルシステム部110は、管理情報メモリ109に格納されている削除対象ファイルのディレクトリエントリに記述されたファイルの先頭クラスタ番号を検出する。そして、先頭のクラスタから、削除対象ファイルに関する全ての管理テーブルエントリを読み出すよう記録媒体制御部112に指示し、読み出された全ての管理テーブルエントリを管理情報メモリ109に記憶させる(S304)。
次に、ファイルシステム部110は、管理情報メモリ109に記憶された削除対象ファイルのディレクトリエントリを消去する。また、削除対象ファイルを格納しているディレクトリに関するディレクトリエントリの内容を変更する。更に、削除対象ファイルに関する全ての管理テーブルエントリを、空きクラスタを示す所定値に変更する(S305)。管理情報メモリ109に記憶されたディレクトリ情報と管理テーブルの変更が完了すると、ファイルシステム部110は、管理情報メモリ109に記憶されているディレクトリ情報と管理テーブルの記録制御を行う。具体的には、ファイルシステム部110は、管理情報メモリ109に記憶されているディレクトリ情報と管理テーブルとを、記録媒体113の規定されたクラスタに記録するよう、記録媒体制御部112に指示する(S306)。転送制御部111は、管理情報メモリ109からディレクトリ情報と管理テーブルを読み出して記録媒体制御部112に送る。記録媒体制御部112は、ディレクトリ情報と管理テーブルを、それぞれ記録媒体113における規定されたクラスタに記録する。
一方、S303において、ディレクトリ情報と管理テーブルの合計サイズが管理情報メモリ109の容量よりも大きいと判別された場合、ファイル短縮削除処理を実行する(S307)。
図4は、S307のファイル短縮削除処理を示すフローチャートである。まず、ファイルシステム部110は、管理情報メモリ109に削除対象ファイルディレクトリ情報が蓄積されているかどうか判別する(S401)。管理情報メモリ109に削除対象ファイルのディレクトリ情報が格納されていないと判別された場合、ファイルシステム部110は削除対象ファイルのディレクトリ情報を読み出させる。読み出されたディレクトリ情報は管理情報メモリ109に記憶される(S402)。
次に、ファイルシステム部110は、管理情報メモリ109に格納された削除対象ファイルのディレクトリエントリに記述されているファイル先頭クラスタ番号を検出し、管理情報メモリ109に保存する(S403)。そして、ファイルシステム部110は、管理情報メモリ109に記憶可能な管理テーブルのデータ量に基づいて、管理情報メモリ109に記憶された削除対象ファイルのディレクトリエントリにおけるファイルサイズを変更する(S404)。ここで、ファイルシステム部110は、管理情報メモリ109のうち、削除対象ファイルの管理テーブルを記憶可能な容量を求める。この記憶可能な容量とは、管理情報メモリ109の容量のうち、S403で記憶した開始クラスタ番号の情報を記憶するのに必要な容量を除いた容量とする。そして、管理情報メモリ109に記憶可能な管理テーブルエントリの数を算出する。この算出された管理テーブルエントリの数と1クラスタあたりのデータ量とを乗算した値を、削除対象ファイルのファイルサイズから減算する。そして、ディレクトリエントリに記述されたファイルサイズを、減算の結果得られた値に変更する。
このようにディレクトリ情報を変更すると、ファイルシステム部110は、変更されたディレクトリ情報を記録媒体113に記録するよう、記録媒体制御部112に指示する。記録媒体制御部112は転送制御部111により管理情報メモリ109から送信されたディレクトリ情報を記録媒体113の規定されたセクタに記録する(S405)。ディレクトリ情報を記録した後は、管理情報メモリ109におけるディレクトリ情報を記憶していた領域を空き領域すなわち未使用状態にする。
次に、ファイルシステム部110は、削除対象ファイルの管理テーブルが管理情報メモリ109に格納されているかどうか判別する(S406)。管理情報メモリ109に管理テーブルが記憶されていないと判別された場合、削除対象ファイルの管理テーブルのうちファイル末尾の管理テーブルエントリから管理情報メモリ109に記憶可能なサイズ分を読み出して管理情報メモリ109に記憶させる。この処理は具体的には例えば以下のようにして行う。ファイルシステム部110は記録媒体制御部112に対して、削除対象ファイルの管理テーブルを先頭の管理テーブルエントリからクラスタチェーンの順に読み出させる(S407)。読み出された管理テーブルエントリは、転送制御部111によって順次、管理情報メモリ109に記憶される。ファイルシステム部110は、管理情報メモリ109に管理テーブルエントリが記憶されると、管理情報メモリ109に記憶された管理テーブルエントリがクラスタチェーンの末尾を示す値を含んでいるかどうかを判別する(S408)。管理情報メモリ109上の管理テーブルエントリがファイル末尾を示す値ではない場合、S407に戻って引き続き管理テーブルエントリを読み出す。このように、ファイル末尾の管理テーブルエントリが管理情報メモリ109に記憶されるまで処理を繰り返す。ここで、先頭の管理テーブルエントリから読み出して管理情報メモリ109に記憶している際に、管理情報メモリ109の空きが無くなった場合には、先頭の管理テーブルエントリから順に上書きしていく。そのため、最終クラスタの管理テーブルエントリが管理情報メモリ109に記憶された段階では、ファイルの末尾から、管理情報メモリ109に対応した容量の管理テーブルエントリが記憶されていることになる。
ファイル末尾の管理テーブルエントリが管理情報メモリ109に記憶されると、ファイルシステム部110は、管理情報メモリ109に記憶された短縮対象ファイルの各管理テーブルエントリの値を空き領域を示す値に変更する(S409)。こうして、管理情報メモリ109に記憶した部分の管理テーブルを未使用状態に変更する。ただし、管理情報メモリ109に記憶された管理テーブルエントリのうち、クラスタチェーンの先頭の管理テーブルエントリに対しては、ファイル末尾を示す値に変更する。
このように、管理情報メモリ109に記憶された各管理テーブルエントリを変更すると、ファイルシステム部110は、転送制御部111に指示して、変更された管理テーブルを記録媒体制御部112に転送させる。そして、ファイルシステム部110は、記録媒体制御部112に対して変更後の管理テーブルを記録媒体113に記録するよう指示する(S410)。このようにファイル短縮削除処理を実行した後、再度、図3のS301−S303の処理を繰り返す。
ファイル短縮削除処理の際の管理情報の様子を図2(b)、(c)に示す。図2(b)は、削除対象ファイルのディレクトリ情報203と管理テーブル204を示している。そして、205は削除対象ファイルのディレクトリ情報203のデータ量を示し、206はS302において算出された、管理情報メモリ109に記憶可能な管理テーブル204のサイズ(エントリ数)を示している。
図2(b)に示すように、ディレクトリ情報を記憶した管理情報メモリ109に、削除対象ファイルの管理テーブルの一部を記憶することができない。そのため、管理テーブル204のエントリ数から、データ量206に対応するエントリ数を除いた管理テーブルエントリに対応したファイルサイズとなるように、ディレクトリ情報を変更する。
更に、図2(c)に示すように、ファイル末尾の管理テーブルを管理情報メモリ109に記憶する。図2(c)において、207が、S407、S408の処理により管理情報メモリ109に記憶される管理テーブルのデータ量である。そして、S409において、207で示されるデータ量の管理テーブルにおける各エントリを空きクラスタに変更する。なお、データ量207はデータ量206よりも多いが、これは、S405でディレクトリ情報を記録媒体113に書き込んだ後は、このディレクトリ情報の記憶領域を管理テーブルの記憶用に用いているためである。また、208は、ファイル短縮削除処理の後、新たにファイル末尾となる管理テーブルエントリである。この管理テーブルエントリ208を、ファイル末尾を示す値に変更する。
このように、本実施形態では、ファイルを削除する際に、削除対象ファイルの管理テーブルの一部を管理情報メモリに記憶できない場合、ディレクトリ情報が示すファイルサイズを変更する。そして、変更後のファイルサイズ以上の管理テーブルエントリをメモリに記憶して空き領域に変更する。この処理を繰り返すことで、管理情報メモリの容量を小さくした場合でも、正常にファイルを削除することができる。また、ファイル削除処理中にビデオカメラの電源が遮断した場合にも、記録媒体113に記録されたデータと管理情報とが不一致となることを防ぐことができる。そのため、記録媒体113に記録されたファイルが読み出せなくなるのを防ぐことができる。
なお、本実施形態では、S303において、削除対象ファイルに関するディレクトリ情報のサイズと管理テーブルのサイズの合計と、管理情報メモリ109の容量とを比較していた。しかし、管理情報メモリ109を別の用途に用いることも可能であり、この場合、管理情報メモリ109の領域のうち、ディレクトリ情報と管理テーブルを記憶するために使用できる容量をメモリ容量として比較することも可能である。
また、図2に示す例では、1回のファイル短縮削除処理により、ディレクトリ情報と管理テーブルの合計サイズが管理情報メモリ109の容量以下となった場合を示した。しかし、1回のファイル短縮削除処理ではディレクトリ情報と管理テーブルの合計サイズが管理情報メモリ109の容量以下とならない場合も考えられる。その場合には、図4の処理を繰り返し実行する。
次に、第2の実施形態について説明する。本実施形態におけるビデオカメラ100の構成、並びに基本的な動作は第1の実施形態と同様である。第2の実施形態では、S307のファイル短縮削除処理が異なる。以下、本実施形態のファイル短縮削除処理について説明する。
図5は、S307のファイル短縮削除処理を示すフローチャートである。まず、ファイルシステム部110は、管理情報メモリ109に削除対象ファイルディレクトリ情報が蓄積されているかどうか判別する(S501)。管理情報メモリ109に削除対象ファイルのディレクトリ情報が格納されていないと判別された場合、ファイルシステム部110は削除対象ファイルのディレクトリ情報を読み出させる。読み出されたディレクトリ情報は管理情報メモリ109に記憶される(S502)。
次に、ファイルシステム部110は、管理情報メモリ109に格納された削除対象ファイルのディレクトリエントリに記述されているファイル先頭クラスタ番号を検出し、管理情報メモリ109に保存する(S503)。そして、ファイルシステム部110は、管理情報メモリ109に記憶可能な管理テーブルのデータ量に基づいて、管理情報メモリ109に記憶された削除対象ファイルのディレクトリエントリが示すファイルサイズを変更する(S504)。ここで、ファイルシステム部110は、上述したS404と同様の処理を行うことができる。すなわち、管理情報メモリ109に記憶可能な管理テーブルエントリの数を算出し、算出された管理テーブルエントリの数と1クラスタあたりのデータ量とを乗算した値を、削除対象ファイルのファイルサイズから減算する。そして、ディレクトリエントリに記述されたファイルサイズを、減算の結果得られた値に変更する。
次に、ファイルシステム部110は、削除対象ファイルの管理テーブルから、先頭クラスタからクラスタチェーンの順に、管理情報メモリ109に記憶可能な管理テーブルエントリの数だけ後のクラスタ番号を検出する。そして、管理情報メモリ109に記憶された削除対象ファイルのディレクトリエントリに記述された先頭クラスタ番号を、ここで検出したクラスタ番号に変更する(S505)。また、変更後の先頭クラスタ番号を管理情報メモリ109に記憶する。
このようにディレクトリ情報を変更すると、ファイルシステム部110は、変更されたディレクトリ情報を記録媒体113に記録するよう、記録媒体制御部112に指示する。記録媒体制御部112は転送制御部111により管理情報メモリ109から送信されたディレクトリ情報を記録媒体113の規定されたセクタに記録する(S506)。ディレクトリ情報を記録した後は、管理情報メモリ109におけるディレクトリ情報を記憶していた領域を空き領域とする。
次に、ファイルシステム部110は、S503で保存した、変更前の削除対象ファイルの先頭クラスタから、クラスタチェーンの順に管理テーブルを読み出すよう、記録媒体制御部112に指示する(S507)。読み出された管理テーブルは、転送制御部111によって順次、管理情報メモリ109に記憶される。ファイルシステム部110は、管理情報メモリ109に管理テーブルエントリが記憶されると、管理情報メモリ109に記憶された管理テーブルエントリが、S505で保存した変更後の先頭クラスタ番号を含んでいるかどうかを判別する(S508)。管理情報メモリ109上の管理テーブルエントリが、変更後の先頭クラスタ番号を含んでいない場合、S507に戻って引き続き管理テーブルエントリを読み出す。
変更後の先頭クラスタ番号を含む管理テーブルエントリが管理情報メモリ109に記憶されると、ファイルシステム部110は、管理情報メモリ109に記憶された短縮対象ファイルの各管理テーブルエントリの値を空き領域に変更する(S509)。このように、管理情報メモリ109に記憶された各管理テーブルエントリを変更すると、ファイルシステム部110は、転送制御部111に指示して、変更された管理テーブルを記録媒体制御部112に転送させる。そして、ファイルシステム部110は、記録媒体制御部112に対して変更後の管理テーブルを記録媒体113に記録するよう指示する(S510)。このようにファイル短縮削除処理を実行した後、再度、図3のS301−S303の処理を繰り返す。
本実施形態におけるファイル短縮削除処理の際の管理情報の様子を図2(d)に示す。図2(b)に示すように、ディレクトリ情報を記憶した管理情報メモリ109に、削除対象ファイルの管理テーブルの一部を記憶することができない。そのため、管理テーブル204のエントリ数から、データ量206に対応するエントリ数を除いた管理テーブルエントリに対応したファイルサイズとなるように、ディレクトリ情報を変更する。
更に、図2(d)に示すように、管理テーブルの先頭から、クラスタチェーンの順に、管理情報メモリ109に記憶する。図2(d)において、209が、S507、S508の処理により管理情報メモリ109に記憶される管理テーブルのデータ量である。そして、S509において、209で示されるデータ量の管理テーブルにおける各エントリを空きクラスタに変更する。また、210は、ファイル短縮削除処理の後、新たにファイルの先頭クラスタとなる管理テーブルエントリである。そこで、S505において、この管理テーブルエントリ210のクラスタ番号を検出し、先頭クラスタ番号を変更する。
このように、本実施形態では、ファイルを削除する際に、削除対象ファイルの管理テーブルの一部を管理情報メモリに記憶できない場合、ディレクトリ情報が示すファイルサイズを変更する。そして、変更後のファイルサイズ以上の管理テーブルエントリをメモリに記憶して空き領域に変更する。この処理を繰り返すことで、管理情報メモリの容量を小さくした場合でも、正常にファイルを削除することができる。また、ファイル削除処理中にビデオカメラの電源が遮断した場合にも、記録媒体113に記録されたデータと管理情報とが不一致となることを防ぐことができる。そのため、記録媒体113に記録されたファイルが読み出せなくなるのを防ぐことができる。更に、第2の実施形態では、ファイルを前方から短縮することによって、読み出したクラスタチェーンを削除しながらファイル末尾までクラスタチェーンを一度辿れば良いため、実行速度を速くすることができる。
(他の実施形態)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。