(57)【要約】【課題】  撮像装置内の記録媒体（内蔵メモリや着脱可能なメモリカードなど）に記録されたオブジェクトの操作（読み出し、削除、情報の取得など）に要する時間を短縮すること。【解決手段】  記録媒体における論理フォルダ階層を構成する各オブジェクトについて、論理フォルダ階層における少なくとも親オブジェクトを特定する情報を含むオブジェクト情報を生成する。そして、外部機器から受信した、例えばＰＴＰに準拠した撮影画像ファイルについてのコマンドを、予め生成したオブジェクト情報を用いて処理する。【選択図】  図２
2006087050.tif 000002
【特許請求の範囲】
【請求項１】
外部機器との通信手段を有し、着脱可能もしくは内蔵した記録媒体に、階層的な論理フォルダ構成に従って撮影画像ファイルを記録する撮像装置であって、
記憶領域を提供する記憶手段と、
前記記録媒体における前記論理フォルダ階層を構成する各オブジェクトについて、前記論理フォルダ階層における少なくとも親オブジェクトを特定する情報を含むオブジェクト情報を生成し、前記記憶手段に記憶するオブジェクト情報生成手段と、
前記外部機器から受信した、前記撮影画像ファイルについてのコマンドを、前記記憶手段に記憶したオブジェクト情報を用いて処理する処理手段とを有することを特徴とする撮像装置。
【請求項２】
前記オブジェクト情報として記憶する情報の内容が、前記論理フォルダ階層を構成するフォルダオブジェクトと、画像オブジェクトとで異なることを特徴とする請求項１記載の撮像装置。
【請求項３】
前記フォルダオブジェクトのオブジェクト情報にのみ含まれる情報には、前記論理フォルダ階層における先頭の子オブジェクトのオブジェクト情報を特定する情報及び子オブジェクトの総数についての情報が含まれることを特徴とする請求項２記載の撮像装置。
【請求項４】
前記画像オブジェクトのオブジェクト情報にのみ含まれる情報には、親オブジェクトを共通とする、同階層の他のオブジェクトのオブジェクト情報を特定する情報が含まれることを特徴とする請求項２又は請求項３記載の撮像装置。
【請求項５】
前記画像オブジェクトのオブジェクト情報にのみ含まれる情報は、前記撮影画像ファイルに記録された情報であることを特徴とする請求項２乃至請求項４のいずれか１項に記載の撮像装置。
【請求項６】
前記画像オブジェクトのオブジェクト情報にのみ含まれる情報には、撮像日時に関する情報が含まれることを特徴とする請求項５記載の撮像装置。
【請求項７】
前記撮影画像ファイルには、サムネイル画像と、本画像とが含まれ、
前記画像オブジェクトのオブジェクト情報にのみ含まれる情報には、前記サムネイル画像に関する情報及び前記本画像に関する情報が含まれることを特徴とする請求項５又は請求項６記載の撮像装置。
【請求項８】
前記画像オブジェクトのオブジェクト情報にのみ含まれる情報は、前記画像オブジェクトの情報要求コマンドを最初に処理する際に前記オブジェクト情報生成手段が取得し、記録することを特徴とする請求項２乃至請求項７のいずれか１項に記載の撮像装置。
【請求項９】
前記記憶手段が提供する前記記憶領域の大きさ及び、前記各オブジェクトについてのオブジェクト情報を記憶する領域の大きさがいずれも固定であることを特徴とする請求項１乃至請求項８のいずれか１項に記載の撮像装置。
【請求項１０】
前記オブジェクト情報の各々には固有の情報が含まれ、当該固有の情報が、前記コマンドにおいてオブジェクトを特定するために用いられる情報と１対１で対応するように定められていることを特徴とする請求項１乃至請求項９のいずれか１項に記載の撮像装置。
【請求項１１】
前記オブジェクト情報生成手段が、前記外部機器との通信開始時に前記オブジェクト情報を生成、記憶することを特徴とする請求項１乃至請求項１０のいずれか１項に記載の撮像装置。
【請求項１２】
請求項１又は請求項３において、オブジェクトの追加、あるいは削除により、親オブジェクト及び子オブジェクトの情報を更新する機能を備えることを特徴とする撮像装置。
【請求項１３】
前記オブジェクト情報には子オブジェクトの総数の情報が含まれ、子オブジェクト数を取得する際に子オブジェクトをカウントしないで、前記オブジェクト情報の子オブジェクトの総数情報を参照することで取得できることを特徴とする撮像装置。
【請求項１４】
前記オブジェクト情報には全子オブジェクトのハンドルが連番であるかどうかを示す情報が含まれ、子オブジェクト全体のハンドルを取得する際、全子オブジェクトのハンドルが連番である場合に、子オブジェクトを検索せずに、計算により全子オブジェクトのハンドルを取得できることを特徴とする撮像装置。
【請求項１５】
記憶領域を提供する記憶手段と、外部機器との通信手段を有し、着脱可能もしくは内蔵した記録媒体に、階層的な論理フォルダ構成に従って撮影画像ファイルを記録する撮像装置の制御方法であって、
前記記録媒体における前記論理フォルダ階層を構成する各オブジェクトについて、前記論理フォルダ階層における少なくとも親オブジェクトを特定する情報を含むオブジェクト情報を生成し、前記記憶手段に記憶するオブジェクト情報生成ステップと、
前記外部機器から受信した、前記撮影画像ファイルについてのコマンドを、前記記憶手段に記憶したオブジェクト情報を用いて処理する処理ステップとを有することを特徴とする撮像装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＣＤなどの撮像素子を用いた撮像装置及びその制御方法に関し、特に撮影されたオブジェクトの階層構造の効率的な作成およびオブジェクトの効率的な検索を行うことの可能な撮像装置及びその制御方法に関する。
【背景技術】
【０００２】
パーソナルコンピュータ等の情報端末と、撮像装置との通信規格としてＵＳＢ (Universal Serial Bus)が知られている。また、最近では、ＵＳＢのスチルイメージクラスインターフェースに基づいて作成されたＵＳＢの上位層の通信規格として、ＰＴＰ(Picture Transfer Protocol)がＰＩＭＡ(Photographic and Imaging Manufactures Association, INC.)によって提案されている。この規格は、デジタルカメラや、スキャナ等を対象としたデータ転送方式を定める。この規格により、ユーザは、画像ファイルがどのようなディレクトリ構造で格納されるかを意識せずに、簡単に撮像又はスキャンした画像のデータファイルをパーソナルコンピュータに取り込むことが可能となる。
【０００３】
また、ＰＴＰには例えば画像ファイルのサムネイル画像を表示する機能が用意されている。なお、ＰＴＰにはコマンドが用意されていて、そのコマンドには、標準のコマンドとベンダ拡張のコマンドがある。
【０００４】
また、撮像装置とプリンタとを直接接続し、相互に通信を行うことにより撮像装置内部に記録された画像データを直接プリンタから印刷する所謂ダイレクトプリント技術も知られている（例えば特許文献１参照）。
【０００５】
デジタルカメラで撮影した画像の管理方法を定めた規格としてＤＣＦ(Design rule for Camera File System)が社団法人日本電子工業振興協会によって策定された。ＤＣＦではフォルダ構成、フォルダ名、オブジェクトのファイル名、オブジェクトの構成方法が定められていて、オブジェクトは「DCIM」フォルダの下のあるフォルダに保存されることになっている。
【０００６】
オブジェクトを検索する際は、各オブジェクトとそのオブジェクトのフルパス（オブジェクトの存在位置を、ディレクトリ構造の最上位階層から全て記載したもの）とを１対１に対応付けたデータテーブルをデジタルカメラ内の一時記憶装置に作成し、そのデータテーブルを参照して先頭のエントリからデータテーブルのアドレス順に検索する方法がよく行われる。
【０００７】
【特許文献１】特開２００４−１５２３４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
オブジェクトとそのフルパスとが１対１に対応したデータテーブルを利用し、先頭のエントリからデータテーブルのアドレス順（先頭から順番）にオブジェクトを検索することを考える。撮像装置に内蔵もしくは装着された記録媒体に多数の画像がある場合、データテーブルには多くのエントリが存在する。このようなデータテーブルを先頭のエントリから順に検索すると、最悪な場合にはデータテーブル内の全エントリを検索することになり、検索に時間がかかってしまう問題がある。
【０００９】
本発明はこのような従来技術の課題に鑑みてなされたものであり、撮像装置内の記録媒体（内蔵メモリや着脱可能なメモリカードなど）に記録されたオブジェクトの操作（読み出し、削除、情報の取得など）に要する時間を短縮することを目的とする。
【課題を解決するための手段】
【００１０】
上述の目的は、外部機器との通信手段を有し、着脱可能もしくは内蔵した記録媒体に、階層的な論理フォルダ構成に従って撮影画像ファイルを記録する撮像装置であって、記憶領域を提供する記憶手段と、記録媒体における論理フォルダ階層を構成する各オブジェクトについて、論理フォルダ階層における少なくとも親オブジェクトを特定する情報を含むオブジェクト情報を生成し、記憶手段に記憶するオブジェクト情報生成手段と、外部機器から受信した、撮影画像ファイルについてのコマンドを、記憶手段に記憶したオブジェクト情報を用いて処理する処理手段とを有することを特徴とする撮像装置によって達成される。
【００１１】
また、上述の目的は、記憶領域を提供する記憶手段と、外部機器との通信手段を有し、着脱可能もしくは内蔵した記録媒体に、階層的な論理フォルダ構成に従って撮影画像ファイルを記録する撮像装置の制御方法であって、記録媒体における論理フォルダ階層を構成する各オブジェクトについて、論理フォルダ階層における少なくとも親オブジェクトを特定する情報を含むオブジェクト情報を生成し、記憶手段に記憶するオブジェクト情報生成ステップと、外部機器から受信した、撮影画像ファイルについてのコマンドを、記憶手段に記憶したオブジェクト情報を用いて処理する処理ステップとを有することを特徴とする撮像装置の制御方法によっても達成される。
【発明の効果】
【００１２】
以上の構成により、本発明によれば、撮像装置内の記録媒体（内蔵メモリや着脱可能なメモリカードなど）に記録されたオブジェクトの操作（読み出し、削除、情報の取得など）に要する時間を短縮することができる。
【発明を実施するための最良の形態】
【００１３】
以下、添付図面を参照して本発明をその好適な実施形態に基づいて詳細に説明する。
＜第１の実施形態＞
図１は、本実施形態に係る撮像装置としてのデジタルカメラ１００の構成例を示すとともに、デジタルカメラ１００と通信可能な外部情報端末（以下、単に「端末」と呼ぶことがある）としてのパーソナルコンピュータ（ＰＣ）１０１とデジタルカメラ（以下、単に「カメラ」と呼ぶ）１００とを接続した状態を示している。
【００１４】
デジタルカメラ１００は、端末１０１との通信を行うための通信制御装置１０２、デジタルカメラ１００全体の動作制御を行う演算装置（ＣＰＵ）１０３、撮影画像の圧縮符号化や輪郭強調、ノイズ除去等の処理を行う信号処理装置１０４、レンズやオートフォーカス、ズーム駆動用モータなどを含む光学ユニット１０５、ＣＰＵ１０３の一時記憶領域などに用いられる一時記憶装置（ＤＲＡＭ）１０６、フラッシュメモリ（登録商標）などの不揮発性記憶装置である二次記憶装置１０７、カーソルキーや設定／実行ボタン、メニューキーなど、ユーザがデジタルカメラ１００に各種指示を与えるための操作部１０８、ＬＣＤを代表とする表示部１０９、ＣＰＵ１０３が実行する制御プログラムを記憶する読み出し専用メモリ（ＲＯＭ）１１０、メモリカードを代表とする着脱可能な記録媒体１１１及びその読み書き装置（例えばカードリーダライタ、光学ドライブ等）１１２とを有している。
【００１５】
なお、本実施形態においては、デジタルカメラ１００と端末１０１とはＵＳＢインタフェースで接続され、ＰＴＰに準拠した通信、すなわちＰＴＰに準拠したコマンドを用いた通信が行われるものとする。しかし、デジタルカメラ１００と端末１０１とをＵＳＢ以外の接続方法で接続しても良い。具体的には、ＩＥＥＥ１３９４を代表とする有線接続や、Bluetooth、ＩＥＥＥ８０２．１１ｘを代表とする無線接続を用いることができる。なお、上述のように、ＰＴＰに準拠したコマンドには、標準のコマンドおよびベンダ拡張のコマンドがある。
【００１６】
（TreeDataTableの説明）
図２は本実施形態におけるデジタルカメラ１００がＰＣ１０１との通信開始時に、一時記憶装置１０６に作成するTreeDataTableの構造を示す図である。
TreeDataTableはカメラ内に記録されているオブジェクト情報（ファイル情報、ディレクトリ情報）を記録するためのテーブルである。このテーブルのサイズは固定である。TreeDataTableはそれぞれが固定サイズを有し、１つのオブジェクトに対応するAssociation情報あるいは画像情報単位で記録される。従って、１つのテーブルに記憶できるオブジェクトの数は固定である。
【００１７】
上述のように、TreeDataTableは、フォルダなど画像以外のオブジェクトについての情報であるAssociation情報と、画像オブジェクトについての情報が記録される画像情報とによって構成される。図２においては、Association情報の例としてＡ１が、画像情報の例としてＩ１がそれぞれ例示されている。なお、TreeDataTableにおいて、Association情報と画像情報が格納される順序は任意である。
【００１８】
次に、Association情報の各フィールドについて説明する。フィールドUsedFlagはオブジェクト情報が有効かどうかを示すフラグである。UsedFlagは例えば初期状態（有効状態）で真値(TRUE)をとり、対応するオブジェクトが削除されると無効状態(FALSE)に書き換えられる。
【００１９】
フィールドFormatCodeにはオブジェクト情報の形式（Association情報か画像情報かを識別可能な情報で、例えば画像情報であればそのオブジェクトの種類（JPEG,GIF,bmp等）を示す値）が格納される。フィールドInitStateはオブジェクト情報の状態を示す。ＰＣ１０１との通信が開始され、TreeDataTableが作成された時点ではフォルダ構成状態になる。そして、ＰＣからのＰＴＰコマンドに応答してオブジェクト情報を初めて取得しようとするとInitStateはオブジェクト情報詳細記録状態になり、画像情報の一部フィールドがTreeDataTableに記録される。
【００２０】
後述するように、フォルダ構成状態とは、端末との通信開始時に親オブジェクト、先頭の子オブジェクトおよび１つの同階層のオブジェクトについての情報がTreeDataTableに記録される状態である。オブジェクト情報詳細記録状態とは、オブジェクトのヘッダを参照して更新日時、ファイルサイズ等そのオブジェクトについての情報がTreeDataTableに記録されている状態である。
【００２１】
フィールドDriveNoはボリュームの番号を示す。フィールドHandleはこのオブジェクトへのハンドル（オブジェクトハンドル）であり、後述するようにTreeDataTableのインデックス番号と等しい。
【００２２】
フィールドParentObjectHandleは親オブジェクトへのハンドル（親オブジェクトに対応するオブジェクトハンドルの値、すなわちインデックス番号）である。フィールドPreviousSiblingObjectHandleは同じ階層にある前のオブジェクトへのハンドルである。フィールドNextSiblingObjectHandleは同じ階層にある次のオブジェクトへのハンドルである。フィールドChildObjecthandleは先頭の子オブジェクトへのハンドルである。これら４つのフィールドにより、オブジェクトの階層構造の再現及び把握が可能である。
【００２３】
フィールドFileNameはオブジェクト名である。DCF規約に準じた文字列が入り、１３文字以内とする。フィールドAttributeはファイルの属性（アクセス権など）を示す。フィールドFileStampはファイルの更新日時を示す。フィールドFileSizeはファイルのサイズであり、ヘッダを含むオブジェクト全体のサイズである。フィールドChildNumは子オブジェクトの数である。フィールドChildStateは子オブジェクトのオブジェクトハンドルが連番であるどうかを示す。フィールドReserveは予約領域である。
【００２４】
次に、TreeDataTableの画像情報の各フィールドについて説明する。フィールドUsedFlag,FomatCode,InitState,DriveNo,Handle,ParentObjectHandle,PreviousSiblingObjectHandle,nextSiblingObjectHandle,ChildObjectHandle,FileName,Attribute,FileStamp,FileSizeはそれぞれAssociation情報の同一名フィールドと同じ用途で使用される。
【００２５】
フィールドYear,Month,Day,Hour,Min,Secは撮影日時（年、月、日、時、分、秒）を示すために使用される。ThumbSizeはサムネイル画像のデータサイズである。PixWidthは本画像データ幅方向の画素数、PixHeightは高さ方向の画素数である。Offsetはサムネイル画像データと本画像データとを含む画像ファイルオブジェクトにおいて、本画像データが始まる位置を示す値（バイト数）である。Sizeは本画像のデータサイズである。Reserveは予約領域である。
【００２６】
なお、本実施形態においては、Association情報及び画像情報のフィールドHandle（オブジェクトハンドル）に格納される値が、TreeDataTableにおけるインデックス番号と等しくなるようにTreeDataTableを作成する。つまり、TreeDataTableを構成するAssociation情報及び画像情報のフィールドHandleは、そのオブジェクト情報がTreeDataTable中何番目に存在するかを表す値と等しい。
【００２７】
上述のように、Association情報及び画像情報とは等しい固定サイズ（例えばｎバイトとする）を有するため、オブジェクトハンドル（インデックス番号）が１から始まる整数であるとした場合、TreeDataTable中、オブジェクトハンドル（インデックス番号）ａのオブジェクト情報の開始位置は、（ｎ×ａ＋１）バイト目として直ちに求めることができる。
【００２８】
従って、オブジェクトハンドルを用いるPTPコマンドでの検索が要求された場合、直ちに検索対象のAssociation情報又は画像情報を読み出すことができ、検索の高速化を実現している。
【００２９】
（TreeDataTableの生成処理）
図４はデジタルカメラ１００内の記憶媒体１１１又は二次記憶装置１０７に記録されているオブジェクトの論理的な階層構成の例を示したものである。なお、以下の説明において、画像オブジェクトは着脱可能な記憶媒体１１１に記録されるものとするが、着脱できない二次記憶装置１０７に記録されていても動作は同じである。
【００３０】
このような記録媒体１１１が装着された状態において、利用者が例えばＵＳＢやＩＥＥＥ１３９４などの有線インタフェースや、Ｂｌｅｕｔｏｏｔｈ等の無線インタフェースを通じて図１のようにデジタルカメラ１００とＰＣ１０１とを接続する。それにより、デジタルカメラ１００と端末１０１との通信が開始する。
【００３１】
通信の開始により、デジタルカメラ１００のＣＰＵ１０３は、記録媒体１１１の内容を参照しながら一時記憶装置１０６の所定領域にTreeDataTableを生成する以下、TreeDataTableの生成、書き込み処理について図８のフローチャートを用いて説明する。
【００３２】
まず、ＣＰＵ１０３は、インデックス番号ｉを１に初期化する（ステップＳＴ１０１）。そして、記録媒体１１１を参照し、ルートディレクトリＤ以下の階層から順に参照する。そして、まずフォルダ「DCIM」を参照し、このオブジェクトが画像オブジェクトかどうか判定する（ステップＳＴ１０５）。「DCIM」はフォルダであるため、ステップＳＴ１０７へ進み、フォルダ「DCIM」のオブジェクト情報（Association情報）を図２に示した各フィールドに記録する。なお、ステップＳＴ１０５での判別方法であるが、デジタルカメラ１００の記録媒体１１１に生成されるフォルダ名や階層構造は規格により定められているため、ＣＰＵ１０３は記録媒体１１１中の階層構造におけるフォルダと画像ファイルとを、例えばそのファイルがルートディレクトリＤから何番目の階層に存在するかにより判別することができる。
【００３３】
「DCIM」のオブジェクト情報を、TreeDataTableへ書き込むと、ステップＳＴ１１１でインデックス番号を１インクリメントし、ステップＳＴ１０３へ戻る。なお、フォルダ「DCIM」のオブジェクト情報は、InitStateがフォルダ構成状態、Handle＝１、FileName＝”DCIM”、ChildNum＝１、ChildObjectHandle＝２を有するAssociation情報である。
【００３４】
そして、次は、Handle＝２を有するオブジェクト情報として、「DCIM」の１つ下の階層に存在するフォルダ「100GANON」の情報が、Association情報としてTreeDataTableに記録される。フォルダ「100GANON」のオブジェクト情報は、InitStateがフォルダ構成状態、Handle＝２、ParentObjectHandle=１、NextSiblingObjectHandle＝６、ChildObjectHandle＝３、FileName＝”100GANON”、ChildNum＝３、を有するAssociation情報である。
【００３５】
次に、Handle＝３を有するオブジェクト情報として、フォルダ「100GANON」の下の階層に存在する画像オブジェクト「IMG_0001.JPG」について処理する。画像オブジェクトであるため、ステップＳＴ１０５からＳＴ１０９へ進み、画像情報としてオブジェクト情報を記録する。ただし、この時点ではInitState状態はフォルダ構成であるから、図２に示す各フィールドのうち、先頭のUsedFlagからFileSizeまでを書き込み、フィールドYear以降には何も書き込まれない。
【００３６】
画像オブジェクト「IMG_0001.JPG」のオブジェクト情報は、InitStateがフォルダ構成状態、Handle＝３、ParentObjectHandle=２、NextSiblingObjectHandle＝４、ChildObjectHandle＝NULL、FileName＝”IMG_0001.JPG”を有する画像情報である。
【００３７】
同様にして、次に画像オブジェクト「IMG_0002.JPG」のオブジェクト情報がHandle＝４を有するオブジェクト情報として記録される。画像オブジェクト「IMG_0002.JPG」のオブジェクト情報は、InitStateがフォルダ構成状態、Handle＝４、ParentObjectHandle=２、PreviousSiblingObjectHandle＝３、NextSiblingObjectHandle＝５、ChildObjectHandle＝NULL、FileName＝”IMG_0002.JPG”を有する画像情報である。
【００３８】
次いで、Handle＝５の「IMG_0003.JPG」のオブジェクト情報が、InitStateがフォルダ構成状態、Handle＝５、ParentObjectHandle=２、PreviousSiblingObjectHandle＝４、NextSiblingObjectHandle＝NULL、ChildObjectHandle＝NULL、FileName＝”IMG_0003.JPG”を有する画像情報としてTreeDataTableに記録される。
【００３９】
次に、フォルダ「101GANON」のオブジェクト情報がAssociation情報として、下の階層に存在する画像オブジェクト「IMG_0005.JPG」及び「IMG_0006.JPG」のオブジェクト情報が画像情報としてTreeDataTableに記録される。
【００４０】
最後に、フォルダ「MISC」およびその内部のオブジェクトの情報についても、フォルダ「DCIM」とその内部のオブジェクト情報が記録されたのと同様にして、TreeDataTableに記録される。
【００４１】
そして、ステップＳＴ１１１において、記録媒体１１１内に未登録オブジェクトが存在しないと判定されると、TreeDataTableの作成処理を終了する。なお、ここでは後述する処理に用いる主要なフィールドへの書き込みについてのみ説明したが、他のフィールドについてもそれぞれ適切な値を格納することは言うまでもない。
【００４２】
このように、記録媒体１１１内の各オブジェクトについて、フォルダ／ディレクトリについてはAssociation情報を、画像ファイルについては画像情報を、それぞれTreeDataTableに登録（追加）してゆく。また、この時点において各オブジェクト情報のフィールドInitStateはフォルダ構成状態である。
【００４３】
以下、このようにして作成したテーブルを用いることで、ＰＣ１０１からのＰＴＰコマンドをどのようにして処理し、応答するかについての具体的な例を説明する。
（フォルダ内のオブジェクト数取得処理）
ＰＣ１０１からPTPコマンドGetNumObjectsを受信し、コマンドで特定されるフォルダに含まれるオブジェクトの数を取得する場合の処理について説明する。
【００４４】
ここでは、図４の状態、すなわち、フォルダ「100GANON」内には「IMG_0001.JPG」、「IMG_0002.JPG」、「IMG_0003.JPG」の３つのオブジェクトがある状態で、フォルダ「100GANON」内のオブジェクト数を取得を要求されたものとする。
【００４５】
まず、ＣＰＵ１０３は、ＰＴＰコマンドに含まれるオブジェクトハンドル（フォルダ「100GANON」を指定する情報）を取り出し、その値に等しい値をフィールドHandleに持つオブジェクト情報をTreeDataTableから検索する。
【００４６】
見つかった場合、そのオブジェクト情報（ここではフォルダのオブジェクト情報であるからAssociation情報）の中のフィールドChildNumが示す数を「100GANON」内のオブジェクト数として取得し、ＰＣ１０１に返送する。
【００４７】
（オブジェクト情報取得処理）
次に、ＰＣ１０１からPTPコマンドGetObjectInfoを受信し、コマンドで特定されるオブジェクトについての情報を取得する際の処理について説明する。
ここでは、図４のフォルダ「100GANON」内にある画像オブジェクト「IMG_0001.JPG」のオブジェクト情報取得が要求されたものと仮定する。
【００４８】
まず、ＣＰＵ１０３は、ＰＴＰコマンドに含まれるオブジェクトハンドル（画像オブジェクト「IMG_0001.JPG」を指定する情報）を取り出し、その値に等しい値をフィールドHandleに持つオブジェクト情報をTreeDataTableから検索する。
【００４９】
見つかった場合、そのオブジェクト情報（ここでは画像情報）の中のフィールドInitStateを参照する。InitStateがオブジェクト情報詳細記録状態である場合、画像情報内の全フィールドに情報が格納されているため、画像情報の必要なフィールドからこの画像オブジェクトの情報を取得し、ＰＣ１０１へ返送する。
【００５０】
一方、TreeDataTableが作成されてから「IMG_0001.JPG」のオブジェクト情報が一度も取得されていない場合、InitStateはフォルダ構成状態にある。この場合、この画像オブジェクトのファイルヘッダをデジタルカメラ１００内の記憶媒体１１１から読み込み、この画像オブジェクトの情報を取得する。この画像オブジェクトの情報を取得後、画像情報のフィールドYear以降（撮影日時、サムネイル画像のサイズ、画像の横サイズ、画像の縦サイズを画像情報の中のフィールドYear、Month、Day、Hour、Min、Sec、ThumbSize、PixWidth、PixHeight）にヘッダから取得した情報を書き込むとともに、この画像情報のInitStateをオブジェクト情報詳細記録状態に変更する。そして、ＰＣ１０１へオブジェクト情報を返送する。
【００５１】
（オブジェクトデータ取得処理）
次に、ＰＣ１０１からPTPコマンドGetObjectを受信し、コマンドで特定されるオブジェクトデータを取得する際の処理について説明する。
ここでは、図４のフォルダ「100GANON」内にある画像オブジェクト「IMG_0001.JPG」のオブジェクトデータ取得が要求されたものと仮定する。
【００５２】
まず、ＣＰＵ１０３は、ＰＴＰコマンドに含まれるオブジェクトハンドル（画像オブジェクト「IMG_0001.JPG」を指定する情報）を取り出し、その値に等しい値をフィールドHandleに持つオブジェクト情報をTreeDataTableから検索する。
【００５３】
見つかった場合、そのオブジェクト情報（画像情報）の中のフィールドFileNameを参照する。
フィールドParentObjectHandleを参照し、「IMG_0001.JPG」の親オブジェクト（フォルダ「100GANON」）のオブジェクトハンドル「２」を取得する。
【００５４】
このオブジェクトハンドルをフィールドHandleに有するオブジェクト情報をTreeDataTableから検索する。
見つかった場合、そのオブジェクト情報（フォルダ「100GANON」のオブジェクト情報）のフィールドFileNameを参照する。
【００５５】
フィールドParantObjectHandleを参照し、「100GANON」の親オブジェクト（フォルダ「DCIM」）のオブジェクトハンドル「１」を取得する。
このオブジェクトハンドルをフィールドHandleに有するオブジェクト情報をTreeDataTableから検索する。
見つかった場合、そのオブジェクト情報（フォルダ「DCIM」のオブジェクト情報）のフィールドFileNameを参照する。
【００５６】
フィールドParentObjectHandleを参照し、「DCIM」の親オブジェクト（ボリューム「D」）のオブジェクトハンドル「０」を取得する。
このオブジェクトハンドルをフィールドHandleに有するオブジェクト情報をTreeDataTableから検索する。
見つかった場合、そのオブジェクト情報（ボリューム「D」のオブジェクト情報）のフィールドFileNameを参照する。
ボリューム「Ｄ」は最上位階層であるため、これ以上の上位階層の探索は行われない。
【００５７】
以上のステップにより参照したFilenameを順に並べることで、「IMG_0001.JPG」のフルパス「D:\DCIM\１００GANON\IMG_0001.JPG」を得ることができる。このフルパスによりデジタルカメラ１００内の記憶媒体１１１に記録されている「IMG_0001.JPG」にアクセスし、画像データ「IMG_0001.JPG」をＰＣ１０１上に転送する。
【００５８】
このように、本実施形態のTreeDataTableを用いることで、ＰＴＰコマンドで指定されるオブジェクトハンドルから直ちにオブジェクト情報を参照でき、また、オブジェクト情報には少なくとも親オブジェクトを特定可能な情報が含まれているため、その後は最上位階層まで順にファイル名を取得していけばオブジェクトのフルパスを取得することができる。図４のフォルダ構成を有する記録媒体１１１の場合、画像オブジェクトの数によらず、どの画像オブジェクトも４回TreeDataTableを参照することでそのフルパスを得ることが可能である。これに対し、従来技術で説明した方法では、オブジェクトハンドルをテーブルの最初から順に探索していく必要があるため、オブジェクト数が増加するに従ってテーブルの参照回数が増加し、フルパスの取得に時間を要することになる。
【００５９】
（オブジェクトの削除処理）
次に、ＰＣ１０１からPTPコマンドDeleteObjectを受信し、コマンドで特定されるオブジェクトを削除する場合の処理について説明する。
ここでは、図４のフォルダ「100GANON」内にある画像オブジェクト「IMG_0001.JPG」の削除が要求されたものと仮定する。
【００６０】
まず、ＣＰＵ１０３は、ＰＴＰコマンドに含まれるオブジェクトハンドル（画像オブジェクト「IMG_0001.JPG」を指定する情報）を取り出し、その値に等しい値をフィールドHandleに持つオブジェクト情報をTreeDataTableから検索する。
【００６１】
見つかった場合、そのオブジェクト情報（画像情報）の中のフィールドUsedFlagの値をFALSE（無効）に書き換え、デジタルカメラ１００内の記憶媒体１１１から画像オブジェクト「IMG_0001.JPG」を削除する。
【００６２】
そして、他のオブジェクトの、関連するフィールドの変更処理を行う。具体的には、削除されたオブジェクトの親オブジェクトのオブジェクト情報については、フィールドChildNumを１減らし、また削除されたオブジェクトが先頭の子オブジェクトであれば、ChildObjectHandleを削除されたオブジェクトのNextSiblingObjectHandleに格納されたハンドルに書き換える。また、削除されたオブジェクトのNextSiblingObjectHandleで特定されるオブジェクトのPreviousObjectHandleをNULLに変更する。また削除されたオブジェクトが先頭あるいは末尾の子オブジェクト以外の場合は、(次の子オブジェクトのハンドル)−(子オブジェクトのハンドル)＝1が成り立たなくなるため、オブジェクトハンドルの連番を示すChildStateをFALSEに更新する。ただし、ChildStateがFALSEでオブジェクトの削除を行うことで子オブジェクトの数が1となった場合、ChildStateをTRUEに更新する。
【００６３】
また、削除されたオブジェクトが親オブジェクトである場合には、その子オブジェクト以下の全オブジェクトのオブジェクト情報のUsedFlagをFALSEに設定する。
【００６４】
（ＰＣからのオブジェクト情報の登録処理）
次に、ＰＣ１０１からPTPコマンドSendObjectInfoを受信し、TreeDataTableにオブジェクト情報を登録する処理について説明する。
ここでは、カメラの記録媒体１１１に存在しない画像オブジェクトのオブジェクト情報をがＰＣ１０１からカメラ１００に送信され、記録媒体１１１内のフォルダ「100GANON」内にあるオブジェクト「IMG_0006.JPG」のオブジェクト情報として登録する場合を想定する。また、ここではTreeDataTableにはオブジェクト情報がまだ登録可能である（最終インデックスまで記録されていない）とする。
【００６５】
以下、図５に示すフローチャートを参照しながら、PTPコマンドSendObjectInfoを受信した際のTreeDataTableへの登録処理について説明する。
TreeDataTableにおいて、オブジェクト情報が記録されている最後のインデックスの次のインデックスに画像オブジェクト「IMG_0006.JPG」の画像情報を書き込む（ステップＳＴ５０１）。
【００６６】
フィールドHandleを参照し、オブジェクト「100GANON」のオブジェクトハンドルであるかどうか判定する（ステップＳＴ５０２）。
ＳＴ５０２でオブジェクト「100GANON」のオブジェクトハンドルでないと判定された場合、ステップＳＴ５０３で、参照したオブジェクト情報のインデックスがTreeDataTableの最終インデックスであるか判定する。
【００６７】
ステップＳＴ５０３で最終インデックスでないと判定された場合、ステップＳＴ５０４で次のインデックス（オブジェクト情報）を参照する。次にステップＳＴ５０２へ戻る。
ステップＳＴ５０３で最終インデックスであると判定された場合、処理を終了する。
【００６８】
ステップＳＴ５０２でオブジェクト「100GANON」のハンドルであると判断された場合、すなわち、「100GANON」のオブジェクト情報がTreeDataTableから見つかったら、ステップＳＴ５０５で、そのHandleが含まれるAssociation情報のフィールドChildObjectHandleとフィールドChildNumを参照する。また、ChildNumの値を１増やす。
【００６９】
ステップＳＴ５０６でフィールドChildObjectHandleがNULLであるかどうか判定する。
ステップＳＴ５０６でフィールドChildObjectHandleがNULLでないと判定された場合、すなわち、フォルダ「100GANON」に他の画像ファイルが既に存在する場合には、ステップＳＴ５０７でフィールドChildObjectHandleが指し示すインデックスのオブジェクト情報を参照する。
【００７０】
参照先の画像情報のフィールドNextSiblingObjectHandleを参照し、フィールドNextSiblingObjectHandleが指し示すインデックスのオブジェクト情報を参照する。この処理を（フィールドChildNumに記録されている値−１）回分繰り返す（ステップＳＴ５０８）。これにより、フォルダ「100GANON」に含まれる（フォルダ「100GANON」の１階層下の）画像ファイルに対応する最後のオブジェクト情報に到達する。
【００７１】
ステップＳＴ５０９で、このオブジェクト情報のフィールドNextSiblingObjectHandleに、ステップＳＴ５０１で「IMG_0006.JPG」の画像情報を記録したインデックス（Handleの値）を書き込む。これにより、「IMG_0006.JPG」がフォルダ「100GANON」の１階層下に存在するものとしてTreeDataTableへ登録されたことになる。
【００７２】
一方、ステップＳＴ５０６でオブジェクト「100GANON」のフィールドChildObjectHandleがNULLと判定された場合（すなわち、フォルダ「100GANON」にまだ画像ファイルが存在しない場合）、ステップＳＴ５１０でフィールドChildObjectHandleに「IMG_0006.JPG」の画像情報を記録したインデックスを書き込む。
なお、ステップＳＴ５０７での判定はフィールドChildNumが0かどうかを調べてもよい。
【００７３】
（オブジェクトサイズとオフセット取得処理）
次に、ＰＣ１０１から拡張PTPコマンドGetPartialObjectInfoを受信し、コマンドで特定されるオブジェクトについてオブジェクトのサイズと、オブジェクトデータが始まるオフセットを取得する際の処理について説明する。ここで、GetPartialObjectInfoとは、オブジェクト中の構成要素の種類を指定し、その構成要素のサイズおよび構成要素のオブジェクトの先頭からのオフセットを取得するコマンドである。
【００７４】
ここでは、図４のフォルダ「100GANON」内にある画像オブジェクト「IMG_0001.JPG」のJPEG全画像データ（サムネイル画像ではない、実際の画像データ）について、そのサイズとオブジェクト「IMG_0001.JPG」の先頭からのオフセット情報（すなわち、フィールドOffset,Sizeの値）取得が要求されたものと仮定する。
【００７５】
まず、ＣＰＵ１０３は、ＰＴＰコマンドに含まれるオブジェクトハンドル（画像オブジェクト「IMG_0001.JPG」を指定する情報）を取り出し、その値に等しい値をフィールドHandleに持つオブジェクト情報をTreeDataTableから検索する。
【００７６】
見つかった場合、そのオブジェクト情報の中のフィールドInitStateを参照する。
参照の結果、InitStateがオブジェクト情報詳細記録状態であれば、上述の通りフィールドOffset, Sizeには既に値が読み込まれているため、画像情報中のフィールドSizeおよびOffsetからオブジェクト「IMG_0001.JPG」の構成要素であるJPEG全画像のサイズおよび、JPEG全画像についてオブジェクト「IMG_0001.JPG」の先頭からのオフセットを取得する。
【００７７】
一方、InitStateがファイル構成状態の場合には、フィールドOffset, Sizeに値が読み込まれていないため、上述のオブジェクトデータ取得処理で説明したようにしてオブジェクト「IMG_0001.JPG」のフルパスを取得し、記憶媒体１１１に記録されているオブジェクト「IMG_0001.JPG」のヘッダファイルを参照して、オブジェクト「IMG_0001.JPG」の構成要素であるJPEG全画像のバイト数および、JPEG全画像についてオブジェクト「IMG_0001.JPG」の先頭からのオフセットを取得する。そして、ＰＣ１０１へこれら情報を返送する。
【００７８】
（フルパスからのオブジェクトハンドル取得処理）
次に、ＰＣ１０１から拡張PTPコマンドGetObjectHandleByNameを受信し、コマンドで特定されるパス名からオブジェクトハンドルを取得する際の処理について説明する。ここで、GetObjectHandleByNameとは、パス名で示されるオブジェクトのハンドルを取得するPTP拡張コマンドである。この拡張コマンドでは、オブジェクトハンドルではなくフルパスでオブジェクトが指定される。
ここでは、コマンド中、フルパス「D:\DCIM\100GANON\IMG_0001.JPG」で指定されたオブジェクトのハンドル取得を要求されたものと仮定する。
【００７９】
以下、図６に示すフローチャートを参照しながら処理について説明する。
まず、ステップＳＴ６０１〜ＳＴ６０４において、TreeDataTableから、「DCIM」に対応するオブジェクト情報を探索する。
【００８０】
すなわち、ステップＳＴ６０１でTreeDataTableの各オブジェクト情報のフィールドFileNameを参照する。なお、「DCIM」は画像オブジェクトでないことが明らかであるから、オブジェクト情報のフィールドFormatCodeがAssociation情報であるオブジェクトデータのみフィールドFileNameを参照しても良い。
【００８１】
次に、ステップＳＴ６０２でフィールFileNameが「DCIM」であるかどうか判定する。
ステップＳＴ６０２で「DCIM」フォルダでないと判定された場合、ステップＳＴ６０３で最終インデックス（最終オブジェクトデータ）かどうか判定する。
【００８２】
ステップＳＴ６０３で最終インデックスでないと判定された場合、ステップＳＴ６０４で次のオブジェクトデータのフィールドFileNameを参照し、ステップＳＴ６０２に戻る。
ステップＳＴ６０３で最終インデックスであると判定された場合、処理を終了する。
【００８３】
ステップＳＴ６０２でFileNameが「DCIM」のオブジェクトデータが見つかったら、ステップＳＴ６０５でそのオブジェクト情報のフィールドChildObjectHandleおよびChildNumを参照する。
【００８４】
次に、ステップＳＴ６０６で、フィールドChildObjectHandleに記述されているハンドル（インデックス番号）で示されるオブジェクト情報を参照する。
次に、ステップＳＴ６０７でフィールドFileNameを参照する。
次に、ステップＳＴ６０８でFileNameが「100GANON」であるかどうか判定する。
【００８５】
ステップＳＴ６０８でFileNameが「100GANON」でないと判定された場合、ステップＳＴ６０９でNextSiblingObjectHandleに記述されているインデックス番号で示されるオブジェクト情報（すなわち、同階層の別フォルダのオブジェクト情報）を参照する。次にステップＳＴ６０７に戻り、「100GANON」のオブジェクト情報を参照するまで最大ChildNum回（図４の例では２回）TreeDataTableを探索する。
【００８６】
一方、ステップＳＴ６０８でFileNameが「100GANON」であると判定された場合には、ステップＳＴ６１０でフィールドChildObjectHandleおよびChildNumを参照する。
次に、ステップＳＴ６１１でChildObjectHandleに記述されているインデックス番号で示されるオブジェクト情報を参照する。
次に、ステップＳＴ６１２でフィールドFileNameを参照する。
【００８７】
次に、ステップＳＴ６１３でFileNameが「IMG_0001.JPG」フォルダかどうか判定する。ステップＳＴ６１３でFileNameが「IMG_0001.JPG」でないと判定された場合、ステップＳＴ６１４でNextSiblingObejctHandleに記述されているインデックス番号で示されるオブジェクト情報を参照する。次にステップＳＴ６１２に戻り、「IMG_0001.JPG」の画像情報を参照するまで、最大「100GANON」オブジェクト情報のChildNum回だけ、TreeDataTableを探索する。
【００８８】
ステップＳＴ６１３でFileNameが「IMG_0001.JPG」であると判定された場合、ステップＳＴ６１５でそのオブジェクト情報のフィールドHandleを参照し、パス名「D:\DCIM\100GANON\IMG_0001.JPG」に対応するオブジェクトハンドルをＰＣ１０１に転送する。
【００８９】
（ストレージ内の全オブジェクトハンドルの取得）
次に、ＰＣ１０１からPTPコマンドGetObjectHandlesを受信し、ストレージ内の指定されたオブジェクトフォーマットの全オブジェクトハンドルを取得する際の処理について説明する。ここで、GetObjectHandlesとは、ストレージ内の全オブジェクトのハンドルを取得するPTPコマンドである。
ここでは、取得するオブジェクトのフォーマットは全オブジェクトとする。
【００９０】
以下、図９に示すフローチャートを参照しながら説明する。
ステップＳＴ９０１で、TreeDataTableのフィールドFileNameを参照する。
ステップＳＴ９０２で、「DCIM」か判定する。
ステップＳＴ９０２で「DCIM」でないと判定された場合、最終インデックスかどうか判定する（ステップＳＴ９０３）。
【００９１】
ステップＳＴ９０３で最終エントリと判定されない場合、TreeDataTableの次のインデックスを参照し（ステップＳＴ９０４）、ステップＳＴ９０１に戻る。
ステップＳＴ９０３で最終エントリと判定された場合、処理を終了させる。
ステップＳＴ９０１で「DCIM」であると判断された場合、フィールドHandleを参照しその値を取得する（ステップＳＴ９０５）。
次にステップＳＴ９０６で、フィールドChildHandleを参照し、TreeDataTableの「100GANON」のインデックスを参照する。
【００９２】
次にステップＳＴ９０７で、フィールドHandleを参照し、フォルダ「100GANON」のオブジェクトハンドルを取得する。その値をｈとする。
次にステップＳＴ９０８で、フィールドChildNumを参照する。その値をＮとする（図４では３となる）。
【００９３】
次にステップＳＴ９０９で、フィールドChildStateを参照する。
次にステップＳＴ９１０で、ChildStateが「ＴＲＵＥ」かどうか判定する。
ステップＳＴ９１０で「ＴＲＵＥ」と判定された場合、ステップ９０７で取得したフォルダ「100GANON」のオブジェクトハンドルの値hとステップＳＴ９０８で取得した子オブジェクトの数Ｎから、フォルダ「100CANON」内のオブジェクトハンドルの値として、h+1,h+2, ...,h+N、のＮ個取得できる（ステップＳＴ９１１）。次に、ステップＳＴ９１８に進む。
【００９４】
ステップＳＴ９１０で「ＦＡＬＳＥ」と判定された場合、ステップＳＴ９１２で、フィールドChildHandleを参照し、TreeDataTableの画像オブジェクト「IMG_0001.JPG」のエントリを参照する。
ステップＳＴ９１３で、フィールドHandleを参照し、画像オブジェクト「IMG_0001.JPG」のオブジェクトハンドルを取得する。
【００９５】
ステップＳＴ９１４で、Ｎが1かどうか判定する。
ステップＳＴ９１４でＮが１と判定された場合、処理を終了させる。
ステップＳＴ９１４でＮが１と判定された場合、フィールドNextSiblingObjectHandleに記述されている画像オブジェクトのインデックスを参照する（ステップＳＴ９１５）。
【００９６】
次にステップＳＴ９１６でフィールドHandleを参照し、その値を取得する。
ステップＳＴ９１７で、ステップＳＴ９１５及びステップＳＴ９１６を(Ｎ−１)回行ったか判定する。
ステップＳＴ９１７でステップＳＴ９１５及びステップＳＴ９１６を(Ｎ−１)回行ったと判定されない場合、ステップＳＴ９１５に戻る。
ステップＳＴ９１７でステップＳＴ９１５及びステップＳＴ９１６を(Ｎ−１)回行ったと判定された場合、ステップＳＴ９１８に進む。
【００９７】
ステップＳＴ９１８で、子オブジェクトに画像オブジェクトを持つフォルダ(図４の例ではフォルダ「100GANON」)のNextSiblingObjectHandle（図４の例ではフォルダ「101GANON」）を参照し、そのインデックスを参照する。
ステップＳＴ９１９で、NextSiblingObjectHandleがNULLか判定する。
ステップＳＴ９１９でNextSiblingObjectHandleがNULLだと判断された場合は、全てのオブジェクトハンドルを取得したので処理を終了させる。
【００９８】
ステップＳＴ９１９でNextSiblingObjectHandleがNULLでないと判断された場合は、ステップＳＴ９０７からステップＳＴ９１７の処理が行われる（ステップＳＴ９２０）。つまりステップＳＴ９２０により、図４のフォルダ「101GANON」内の全てのオブジェクトハンドルを取得することができる。次に、ステップＳＴ１０８に戻る。
以上の処理により、ストレージ内に存在する全てのオブジェクトのハンドルを取得することができる。そのとき、１つ下の階層に画像オブジェクトがあるフォルダのTreeDataTableのフィールドChildStateが「ＴＲＵＥ」である場合、子のオブジェクトのハンドルをたどり、さらにＮ個の同階層の画像オブジェクトのハンドルをたどる必要がないため、処理を高速化することができる。
【００９９】
（TreeDataTableの無効領域再利用処理）
上述のように、本実施形態においてはTreeDataTableのサイズは固定であり、１つのTreeDataTableにオブジェクト情報を記録できるオブジェクトの数も固定である。そのため、最大数のオブジェクトについてオブジェクト情報が記録されている場合（最終インデックスまで使用されている場合）には、新たなオブジェクトについてのオブジェクト情報を記録することが出来ない。
【０１００】
しかし、削除されたオブジェクトについてのオブジェクト情報のように、無効なオブジェクト情報（フィールドUsedFlagがFALSEの情報）があれば、その領域を再利用することが可能である。
【０１０１】
以下、この再利用処理について図７のフローチャートを参照して説明する。
ここでは、TreeDataTableには最終インデックスまでオブジェクト情報が記録されている状態にあり、そこに新たな画像オブジェクト「IMG_0010.JPG」の情報をTreeDataTableに記録することを試みるものと仮定する。
【０１０２】
ステップＳＴ７０１で、記録されていないオブジェクト情報インデックスをTreeDataTableの終端まで検索する。
次に、記録されていないオブジェクト情報領域がある場合、その領域に新しいオブジェクトのオブジェクト情報を書き込む（ステップＳＴ７０２）。このように、ステップＳＴ７０１〜ＳＴ７０２の処理は、まだ空き領域がある状態での新規オブジェクト情報の追加処理に相当する。
【０１０３】
ここでは、既に空き領域がないので、ステップＳＴ７０３へ進み、TreeDataTableの先頭から、フィールドUsedFlagがFALSEであるオブジェクト情報を探索する。すなわち、UsedFlagがTRUEであれば、ステップＳＴ７０６で、このオブジェクト情報が最終インデックスかどうか判定し、最終インデックスでないと判定された場合、ＳＴ７０７で次のインデックスにアクセスし、ステップＳＴ７０３に戻る。
【０１０４】
ステップＳＴ７０６で最終インデックスであると判定された場合、TreeDataTableの全インデックスのフィールドUsedがTRUEであることになり、新しいオブジェクト情報の追加は出来ないため、未処理として終了する。
【０１０５】
一方、ステップＳＴ７０３において、UsedFlagがFLASEである場合、そのオブジェクト情報に画像オブジェクト「IMG_0010.JPG」のオブジェクト情報を上書きする（ステップＳＴ７０４）。
【０１０６】
そして、ステップＳＴ７０５で、そのオブジェクト情報のフィールドUsedFlagをTRUEに変更する。
このように、UsedFlagを用いることで、有限の領域を無駄なく再利用することができる。
【０１０７】
以上説明したように、本実施形態によれば、記録媒体に含まれる個々のオブジェクトについて、少なくとも他の１つのオブジェクトとの相対位置関係を表す情報、具体的には論理的階層フォルダ構成における少なくとも親オブジェクトを特定可能な情報を含むオブジェクトの情報を格納したテーブルを作成することにより、記録媒体に含まれるオブジェクトの数、具体的には画像ファイルの数が多くなっても高速に検索が可能である。
【０１０８】
また、さらにオブジェクト情報として先頭の子オブジェクトを特定可能な情報を含めるとともに、論理的階層構造において同階層に属する共通の親オブジェクトを有する複数の子オブジェクトについては、他の１つの子オブジェクトを特定する情報を記録することにより、ある親オブジェクトの複数の子オブジェクトの中から特定の子オブジェクトを容易に探索することができる。
【０１０９】
さらに、親オブジェクトについては、子オブジェクトの数に関する情報をオブジェクト情報に含めることで、子オブジェクトの数をカウントする従来の方法よりも、子オブジェクトの数を高速に把握することが可能である。
【０１１０】
また、オブジェクトハンドルとテーブルのインデックスが１対１に対応している（同一値又は所定の関係により対応づけされている）ため、PTPコマンドでオブジェクトハンドルを指定してオブジェクトを検索する際、検索時間が短くなる利点がある。特に、テーブルの各オブジェクト情報が固定サイズの領域に記録される場合、オブジェクトハンドルから直ちにオブジェクト情報の開始位置が求まるため、検索が高速化される。
【０１１１】
また、画像オブジェクトのファイルヘッダに含まれるオブジェクト情報については、最初に要求があった時点で取得し、テーブルに登録することで、当初のテーブル作成に係る時間を短縮すると共に、その後同じ情報の要求があった場合には再度ファイルへアクセスすることなくオブジェクト情報を得ることができる。
【０１１２】
また、オブジェクトの全子オブジェクトのハンドルを取得する際、全子オブジェクトのハンドルの値が連番であることが示されている場合、そのオブジェクトのハンドルから計算で求めることができる。そのため、個々の子オブジェクトのにアクセスして子オブジェクトのハンドルを1つづつ取得する従来の方法よりも、全子オブジェクトのハンドルの値を高速に求めることが可能となる。
【０１１３】
＜第２の実施形態＞
（StrageInfoTableの利用）
上述した実施形態の撮像装置において、さらにストレージ情報を記録するためのテーブルStrageInfoTableをさらに作成することも可能である。
図３は本実施形態のデジタルカメラ１００が、TreeDataTable作成後にカメラ内の一時記憶装置１０６に作成可能なStorageInfoTableの例を示す図である。
【０１１４】
StorageInfoTableはデジタルカメラに挿入される記録媒体１１１と、ＰＴＰで定められる、一時記憶装置１０６に作られるの論理的な記録媒体のストレージ情報とを記録するためのテーブルである。StorageInfoTableは図２のTreeDataTableとは別のテーブルである。StorageInfoTableはストレージＩＤごとの情報ＳＴと、全体についての情報ＭＴとの２種類がある。ＰＴＰの規格に従い、論理的なストレージ情報を生成する必要があるので、１つの記録媒体に対してＳＴは２つ作成される。ここで、ストレージＩＤごとの情報ＳＴ1エントリ当たりのサイズは固定サイズであるため、図２のTreeDataTableのフィールドDriveNoを指定することで、StorageInfoテーブル上のどのストレージＩＤ情報のエントリかを指定できる。
【０１１５】
フィールドValidFlagはこの情報が有効かどうかを示すフラグである。フィールドNumはStorageInfoTableに記録されているＳＴの数である。フィールドTotalObjectNumはStorageInfoTableに記録されている全ＳＴに対応するストレージに存在するオブジェクト数（各ＳＴのObjectNumを合計したもの）である。RollStateは図２のTreeDataTableが最終インデックスまで書き込まれ、図２において無効になったフィールドUsedFlagが再利用される可能性がある状態を示す。
【０１１６】
AccessCapabilityはそのＳＴに対応するストレージ（記録媒体又はその論理的ストレージ情報）に対して読み書き可能か否かを示す。DriveNameはボリューム名であり、１文字である。DriveNameは図２のTreeDataTableのフィールドFileNameと同じものとなる。StorageIDはストレージIDである。RootHandleはルートディレクトリへのハンドル（図４の例では、ディレクトリＤに対応するオブジェクトハンドル）である。ObjectNumはこのＳＴに対応するストレージに含まれるオブジェクトの数である。Reserveは予約領域である。
【０１１７】
（StrageInfoTable作成処理）
上述したように、本実施形態のデジタルカメラ１００は、TreeDataTableを作成した後、StorageInfoTableを一時記憶装置１０６に作成することができる。
この場合、ＣＰＵ１０３はカメラ１００に装着されたメモリカード１１１を参照し、メモリカード１１１のストレージ情報ＳＴ１と、論理的なストレージ情報ＳＴ２とを作成するとともに、全体のストレージ情報としてＭＴ１を生成し、各フィールドに適切な値を格納する。
【０１１８】
なお、ボリューム情報については、StorageInfoTableのフィールドDriveNameとTreeDataTableのフィールドFileNameは同じ文字となり、StorageInfoTableのフィールドRootHandleとTreeDataTableのフィールドHandleは同じ値となる。図４の例では、ボリューム「Ｄ」についての情報がこのように作成される。
【０１１９】
（StorageInfoTableとTreeDataTableの関連）
以下では、StorageInfoTableとTreeDataTableの2つのテーブルを使用する例について説明する。
（１．ファイルサイズの取得）
記憶媒体にアクセスして画像オブジェクトのファイルサイズを取得しようとする例について説明する。
ここでは、図４のボリューム「D」内のフォルダ「100GANON」内に存在する画像オブジェクト「IMG_0001.JPG」のファイルサイズを取得するものと仮定する。
【０１２０】
TreeDataTableから画像オブジェクト「IMG_0001.JPG」エントリにアクセスする。
次に、フィールドDriveNoを参照する。
次に、TreeDataTableから取得した画像オブジェクト「IMG_0001.JPG」のDriveNoから、StorageInfoTableのボリューム「D」のエントリにアクセスする。
【０１２１】
次に、ボリューム「D」のStorageInfoTable上のフィールドStorageIDを参照する。
得られたStorageIDの上位2バイトを見る。
StorageIDの上位2バイトが0x0001であれば、実ストレージ上にデータが存在するので、実ストレージ上に存在する画像オブジェクト「IMG_0001.JPG」のヘッダからファイルサイズを取得する。
StorageIDの上位2バイトが0x8000であれば、仮想ストレージ上にデータが存在するので、実ストレージとは別のメモリに存在する画像オブジェクト「IMG_0001.JPG」のヘッダからファイルサイズを取得する。
【０１２２】
（２．アクセス属性によるオブジェクトの削除禁止）
ストレージのアクセス属性が書き込み禁止になっている際に、オブジェクトを削除しようとする例について説明する。
ここでは、図４のボリューム「D」は書込み禁止属性になっていて、フォルダ「100GANON」内に存在する画像オブジェクト「IMG_0001.JPG」を削除するものと仮定する。
【０１２３】
TreeDataTableから画像オブジェクト「IMG_0001.JPG」エントリにアクセスする。
次に、フィールドDriveNoを参照する。
次に、TreeDataTableから取得した画像オブジェクト「IMG_0001.JPG」のDriveNoから、StorageInfoTableのボリューム「D」のエントリにアクセスする。
次に、ボリューム「D」のStorageInfoTable上のフィールド「AccessCapacity」を参照する。
【０１２４】
フィールド「AccessCapacity」が属性が書き込み禁止属性であるため、画像オブジェクト「IMG_0001.JPG」を削除する処理は中止される。
この実施形態ではボリューム内の画像オブジェクトの削除について説明したが、ボリューム内のフォルダの削除についても同様である。また、オブジェクトの追加についても同様である。
【０１２５】
＜他の実施形態＞
上述の実施形態においては、画像オブジェクトのオブジェクト情報（画像情報）がフォルダ構成状態からオブジェクト情報詳細記録状態に遷移するタイミングを、そのオブジェクト情報が実際に要求された時点としていた。このようにすることで、必要な場合にのみ画像オブジェクトのファイルにアクセスし、カメラの処理負荷の軽減やTreeDataTableの作成に係る時間短縮を実現できる。しかし、例えばカメラがアイドル状態にある場合など、負荷が少ない状態にあるとき、順次画像オブジェクトファイルにアクセスし、ファイルヘッダから情報を取得してテーブルへ書き込んでおくようにしてもよい。
【０１２６】
尚、前述した実施形態の機能を実現するソフトウェアのプログラムを、記録媒体から直接、或いは有線／無線通信を用いて当該プログラムを実行可能なＣＰＵ他の構成を備えた撮像装置や情報処理装置（まとめてコンピュータという）に供給し、それら装置が該供給されたプログラムを実行することによって同等の機能が達成される場合も本発明に含む。
【０１２７】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータに供給、インストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明の機能処理を実現するためのコンピュータプログラム自体も本発明に含まれる。
【０１２８】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。
【０１２９】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、磁気テープ等の磁気記録媒体、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ等の光／光磁気記憶媒体、不揮発性の半導体メモリなどがある。
【０１３０】
有線／無線通信を用いたプログラムの供給方法としては、コンピュータネットワーク上のサーバに本発明を形成するコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイル等、クライアントコンピュータ上で本発明を形成するコンピュータプログラムとなりうるデータファイル（プログラムデータファイル）を記憶し、接続のあったクライアントコンピュータにプログラムデータファイルをダウンロードする方法などが挙げられる。この場合、プログラムデータファイルを複数のセグメントファイルに分割し、セグメントファイルを異なるサーバに配置することも可能である。
【０１３１】
つまり、本発明の機能処理をコンピュータで実現するためのプログラムデータファイルを複数のユーザに対してダウンロードさせるサーバ装置も本発明に含む。
【０１３２】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布し、所定の条件を満たしたユーザに対して暗号化を解く鍵情報を、例えばインターネットを介してホームページからダウンロードさせることによって供給し、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【０１３３】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
【０１３４】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
【図面の簡単な説明】
【０１３５】
【図１】本発明の実施形態に係るデジタルカメラのハードウェア構成例及びＰＣとの接続状態を示す図である。
【図２】本発明の実施形態に係るデジタルカメラが生成するTreeDataTableのデータ構造を示す図である。
【図３】本発明の第２の実施形態に係るデジタルカメラが生成するStorageInfoTabelのデータ構造を示す図である。
【図４】デジタルカメラに装着された記録媒体内のオブジェクトの階層構成の例を示す図である。
【図５】第１の実施形態において、SendObjectInfoコマンドをTreeDataTableを用いて実行する際の処理を説明するフローチャートである。
【図６】第１の実施形態において、GetObjectHandleByNameコマンドをTreeDataTableを用いて実行する際の処理を説明するフローチャートである。
【図７】第１の実施形態において、TreeDataTableにオブジェクト情報を追加する際の処理を説明するフローチャートである。
【図８】第１の実施形態において、TreeDataTableを作成する処理を説明するフローチャートである。
【図９】第１の実施形態において、ストレージ内の全オブジェクトハンドルを取得する処理を説明するフローチャートである。
【図１】
2006087050.tif 000003
【図２】
2006087050.tif 000004
【図３】
2006087050.tif 000005
【図４】
2006087050.tif 000006
【図５】
2006087050.tif 000007
【図６】
2006087050.tif 000008
【図７】
2006087050.tif 000009
【図８】
2006087050.tif 000010
【図９】
2006087050.tif 000011