図1を参照して、この実施例のディジタルビデオカメラ10は、イメージセンサ12を含む。イメージセンサ12の前方には図示しない絞りユニットおよび光学レンズが配置されており、被写体の光学像は、これらの部材を経て、イメージセンサ12に照射される。
モード切換スイッチ62によって撮影モードが選択されると、対応する状態信号がシステムコントローラ56からCPU52に与えられる。CPU52はμITRONのようなマルチタスクOSを搭載したマルチタスクCPUであり、撮影モードでは、撮影処理タスク、撮影条件制御タスク、BG(Back Ground)処理タスクなどの複数のタスクが並列して実行される。具体的には、各々のタスクは、予め設定された優先順位に従って、かつ後述する垂直同期信号に応答して、時分割で実行される。
撮影処理タスクでは、オペレータはメニューキー60の操作によって複数の撮影モードから所望の撮影モードを選択できる。撮影画像の解像度およびフレームレートならびに取込音声の音響方式,ビットレートおよびサンプリングレートのいずれかが、各撮影モードにおいて異なる。所望の撮影モードが選択されると、対応する情報信号がシステムコントローラ56からCPU52に与えられる。CPU52は、選択された撮影モードを示す撮影モード情報(解像度,フレームレート,音響方式,ビットレート,サンプリングレート)と、これから作成するムービファイルのファイル名とをレジスタrgstに格納する。
CPU52はまた、撮影モード情報が示す解像度およびフレームレートでの撮影をタイミングジェネレータ(TG)14に命令する。TG14は、シグナルジェネレータ(SG)16から出力される垂直同期信号および水平同期信号に基づいて所望の撮影モード(解像度,フレームレート)に従うタイミング信号を生成し、イメージセンサ12をラスタスキャン方式で駆動する。イメージセンサ12からは、所望の解像度を持つ生画像信号(電荷)が所望のフレームレートで出力され、出力された生画像信号は、CDS/AGC回路18およびA/D変換器20を経て、ディジタル信号である生画像データとして信号処理回路22に入力される。
設定されたズーム倍率が“1.0”のとき、信号処理回路22は、A/D変換器20から入力された生画像データに白バランス調整,色分離,YUV変換などの一連の信号処理を施して1.0倍のYUVデータを生成する。設定されたズーム倍率が“1.0”未満のとき、A/D変換器20から入力された生画像データは、まずズーム回路22aによって縮小ズームを施され、縮小ズームの後に上述の一連の信号処理が実行される。かかる処理によって生成されたYUVデータは、バスB1およびメモリ制御回路26を介してSDRAM26に格納される。
一方、設定されたズーム倍率が“1.0”よりも大きいとき、つまり拡大ズーム処理が必要なとき、ズーム回路22aは、まずA/D変換機器20から入力された生画像データをバスB1およびメモリ制御回路24を通してSDRAM26に一旦書き込む。ズーム回路22aは続いて、拡大ズーム処理に必要な一部のエリアの生画像データをバスB1およびメモリ制御回路24を通して読み出し、読み出された一部のエリアの生画像データに拡大ズームを施す。拡大された生画像データは、上述の一連の信号処理によってYUVデータに変換される。これによって、“1.0”よりも大きい倍率のYUVデータが生成される。生成されたYUVデータは、バスB1およびメモリ制御回路26を介してSDRAM26に格納される。
ビデオエンコーダ28は、バスB1およびメモリ制御回路24を通してSDRAM26からYUVデータを読み出し、読み出したYUVデータをコンポジット画像信号にエンコードする。エンコードされたコンポジット画像信号はモニタ30に与えられ、この結果、被写体のリアルタイム動画像(スルー画像)がモニタ30に表示される。
撮影条件制御タスクでは、CPU52は、絞り量,露光時間,白バランス調整ゲイン,電子ズーム倍率などの撮影条件を制御する。具体的には、被写体の明るさに応じて絞り量または露光時間を調整し、被写体の色に応じて白バランス調整ゲインを補正し、そしてズームキー64の操作状態を示す状態信号の変動に応じて電子ズーム倍率を調整する。この結果、スルー画像の明るさおよび色あいの変動が防止され、ズームキー64の操作に応答してスルー画像のズーム倍率が変化する。
なお、ズームキー64によって“1.0”よりも大きなズーム倍率が選択されたとき、上述のような生画像データをSDRAM26に一旦格納する処理が実行される。
オペレータによってシャッタボタン58が押され、対応する状態信号がシステムコントローラ56から与えられると、CPU52は、撮影された動画像を格納したムービファイルを記録媒体50に作成する。ここで、記録媒体50は着脱自在の記録媒体であり、スロット48に装着されたときにI/F46によってアクセス可能となる。記録媒体50にはCPU50a,バッファメモリ50bおよびハードディスク50cが設けられ、ハードディスク50cには図6に示すようにFAT領域501c,ルートディレクトリ領域502cおよびデータ領域503cが形成される。データ領域503cへのデータ書き込みは、バッファメモリ50bを介して所定量ずつ行われる。
動画像の記録時、CPU52は、BG処理タスクを起動する。このとき、撮影処理タスクとBG処理タスクとの間で処理が円滑に行なれるように、図4に示すような指示リスト52aが作成される。
指示リスト52aには、まず“BG処理開始”,“ファイル作成”,“テーブル作成”および“ファイルオープン”の各々に対応するコマンドおよびパラメータが設定される。“BG処理開始”によってBG処理タスクが開始され、“ファイル作成”によってムービファイルのファイル名と“0”を示すサイズ情報とが図6に示すルートディレクトリ領域502cに書き込まれる。“テーブル作成”では、図7に示すような空き領域テーブル52cが作成される。図7によれば、データ領域503cに形成された各々の空き領域の先頭アドレスおよび空きサイズが、サイズが大きい順に設定される。“ファイルオープン”では、データを書き込むムービファイルを特定するためのハンドル番号が作成される。
こうしてデータ書き込みの準備が完了すると、CPU52は、ムービファイルヘッダを作成すべく、次の1フレーム期間においてサムネイル画像の取り込み処理およびヘッダ情報の作成処理を行う。まず、信号処理回路22に間引き処理を命令し、JPEGコーデック32に圧縮処理を命令する。信号処理回路22は、上述のYUV変換に加えて間引き処理を行い、これによって生成されたサムネイルYUVデータをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。JPEGコーデック32は、バスB1およびメモリ制御回路24を通してSDRAM26からサムネイルYUVデータを読み出し、読み出されたサムネイルYUVデータにJPEG圧縮を施す。JPEGコーデック32はその後、JPEG圧縮によって生成されたサムネイル画像のJPEG生データRthをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。
CPU46はまた、サムネイル画像のJPEGヘッダHthを自ら作成し、作成したJPEGヘッダHthをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。CPU46はさらに、上述の撮影モード情報を含むヘッダ情報Hinfを自ら作成し、作成したヘッダ情報HinfをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。これによって、JPEG生データRth,JPEGヘッダHthおよびヘッダ情報Hinfが、図2に示すようにSDRAM26にマッピングされる。
指示リスト52aには、“ファイル書き込み”が設定される。この“ファイル書き込み”がBG処理によって実行されることで、JPEG生データRth,JPEGヘッダHthおよびヘッダ情報HinfがSDRAM26から読み出され、バスB1およびI/F回路46を介して記録媒体50に与えられる。これによって、図7に示すムービファイルヘッダが図6に示すデータ領域503cに作成される。なお、JPEGヘッダHthおよびJPEG生データRthによって、図7に示すJPEGデータTHが形成される。
ムービファイルヘッダの作成が完了すると、CPU52は、垂直同期信号が発生する毎に画像取り込み処理および音声取り込み処理を行う。
画像取り込み処理では、自ら作成したJPEGヘッダをバスB1およびメモリ制御回路24を通してSDRAM26に書き込むとともに、JPEGコーデック32に圧縮命令を与える。JPEGコーデック32は、圧縮命令が与えられたとき、現フレームのYUVデータをバスB1およびメモリ制御回路24を通してSDRAM26から読み出し、読み出されたYUVデータを目標サイズまで圧縮する。圧縮処理によって現フレームのJPEG生データが生成されると、JPEGコーデック32は、このJPEG生データをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。
ここで、JPEG圧縮時の目標サイズは記録媒体50への記録状況に応じて変更される。つまり、記録処理速度が遅いと、ボトルネックによって処理が破綻する可能性があるため、記録媒体50の記録状況が周期的に検出され、検出結果に応じてJPEG圧縮時の目標サイズが変更される。この目標サイズ変更処理については、後段で詳しく説明する。
音声取り込み処理では、信号処理回路38に処理命令を与える。信号処理回路38は、処理命令が与えられたとき、SRAM38aに蓄積された1フレーム相当の音声データをバスB1およびメモリ制御回路38aを通してSDRAM26に書き込む。このような画像取り込み処理および音声取り込み処理が1フレーム期間毎に行なわれた結果、各フレームのJPEGヘッダ,JPEG生データおよび音声データは、図2に示すようにSDRAM26にマッピングされる。
なお、図2においてJPEGヘッダおよびJPEG生データには1フレーム毎に連続番号0,1,2,…が付されるが、音声データには3フレーム毎に連続番号0,1,2,…が付される。また、同じ番号が付されたJPEGヘッダおよびJPEG生データによって1フレーム分のJPEGデータが形成され、各フレームのJPEGデータの先頭および末尾には、図8に示すようにマーカSOI(Start Of Image)およびEOI(End Of Image)が割り当てられる。
CPU52はまた、1フレーム期間が経過する毎にJPEG生データのアクセス情報,JPEGヘッダのアクセス情報およびJPEGデータのインデックス情報を作成し、3フレーム期間が経過する毎に音声データのアクセス情報および音声データのインデックス情報を作成する。
JPEG生データのアクセス情報は、各フレームのデータサイズとSDRAM26における先頭アドレスとからなり、JPEGヘッダのアクセス情報もまた、各フレームのデータサイズとSDRAM26における先頭アドレスとからなる。JPEGデータのインデックス情報は、各フレームのデータサイズと記録媒体50に書き込まれたときのムービファイルの先頭からの距離とからなる。
また、音声データのアクセス情報は、3フレーム相当のデータサイズとSDRAM26における先頭アドレスとからなり、音声データのインデックス情報は、3フレーム相当のデータサイズと記録媒体50に書き込まれたときのムービファイルの先頭からの距離とからなる。
アクセス情報は図5に示すアクセス情報テーブル52bに作成され、インデックス情報は図3に示す要領でSDRAM26に作成される。図5によれば、3フレーム分のJPEG生データのSDRAMアドレスおよびデータサイズと、3フレーム分のJPEGヘッダのSDRAMアドレスおよびデータサイズと、3フレーム相当の音声データのSDRAMアドレスおよびデータサイズとが、互いに関連付けられる。また、図3によれば、3フレーム相当の音声データの位置情報およびサイズ情報と3フレーム分のJPEGデータの位置情報およびサイズ情報とが、SDRAM26に交互にマッピングされる。
なお、音声信号のサンプリング周波数には、ハードウェアによる実際の処理とソフトウェアの計算との間でずれが生じる場合がある。この実施例では、このずれを補償するべく、JPEGデータのインデックス情報およびアクセス情報に間引き/補間が施される。この間引き/補間処理については、後段で詳しく説明する。
CPU52は、3フレーム相当の音声データと3フレームのJPEGデータとを記録媒体50に書き込むべく、上述のアクセス情報に基づいて“ファイル書き込み”を指示リスト52aに設定する。BG処理によってこの“ファイル書き込み”が実行されることで、3フレーム相当の音声データと3フレームのJPEGデータとがSDRAM26から読み出され、バスB1およびI/F回路46を介して記録媒体50に与えられる。記録媒体50のデータ領域503cには、3フレーム相当の音声データからなる音声チャンクと3フレームのJPEGデータからなる画像チャンクとが記録される。図8に示すように、音声チャンクおよび画像チャンクは、ムービファイル上に交互にマッピングされる。
シャッタボタン58が再度押されると、CPU52は、画像取り込みおよび音声取り込みを中止し、図3に示す要領でSDRAM26に作成されたインデックス情報を記録媒体50に記録するべく“ファイル書き込み”を指示リスト52aに設定する。BG処理タスクによってこの“ファイル書き込み”が実行されることで、インデックス情報がSDRAM26から読み出され、バスB1およびI/F回路46を介して記録媒体50に与えられる。この結果、図8に示すインデックスチャンクがムービファイルの末尾に形成される。インデックスチャンクでは、音声データのファイル上の位置およびサイズは3フレームに相当する時間毎に管理され、JPEGデータのファイル上の位置およびサイズは1フレーム毎に管理される。
インデックスチャンクの作成が完了すると、CPU52は、今回作成されたムービファイルのトータルサイズ値を算出し、算出したトータルサイズ値をムービファイルヘッダに書き込むべく“ファイル書き込み”を指示リスト52aに設定する。このファイル書き込みがBG処理タスクによって実行されることでトータルサイズ値がムービファイルヘッダのヘッダ情報Hinfに追加され、これによってQuickTime規格を満足するムービファイルの作成が完了する。
CPU52は続いて、“ファイルクローズ”および“BG処理終了”を指示リスト52aに設定する。“ファイルクローズ”がBG処理によって実行されると、ルートディレクトリ領域502cに書き込まれたサイズ情報とFAT領域501cに書き込まれたFAT情報とが更新される。具体的には、今回作成されたムービファイルのファイル名がディレクトリエントリから検出され、検出されたファイル名に割り当てられたサイズ情報が“0”からトータルサイズ値に更新される。また、今回作成されたムービファイルの書き込み領域(クラスタ)にリンクが形成されるようにFAT情報が更新される。BG処理は、“BG処理終了”によって終了される。
モード切換スイッチ62によって再生モードが選択され、かつメニューキー60によって所望のムービファイルが選択されると、対応する状態信号がシステムコントローラ56に与えられる。CPU52は、選択されたムービファイルを記録媒体50から検出し、検出したムービファイル内の音声データおよびJPEGデータを再生する。このとき、再生順序は、ムービファイル内のインデックス情報に従う。
図3に示す要領で作成されたインデックス情報がムービファイルに存在する場合、音声データおよびJPEGデータは、音声データ0,JPEGデータ0〜2,音声データ1,JPEGデータ3〜5,…の順で記録媒体50から読み出される。読み出された音声データおよびJPEGデータは、まずメモリ制御回路24によってSDRAM26に格納される。CPU52は、JPEGデータのインデックス情報に従う順序でJPEGコーデック32に伸長命令を与え、音声データのインデックス情報に従う順序で信号処理回路40に処理命令を与える。
JPEGコーデック32は、所望フレームのJPEGデータを形成するJPEG生データをバスB1およびメモリ制御回路24を通してSDRAM26から読み出し、読み出されたJPEG生データにJPEG伸長を施す。JPEG伸長によって生成されたYUVデータは、バスB1およびメモリ制御回路24を通してSDRAM26に格納され、その後バスB1およびメモリ制御回路24を通してビデオエンコーダ28に与えられる。この結果、対応する再生画像がモニタ30に表示される。
信号処理回路40は、所望の3フレームに相当する音声データをバスB1およびメモリ制御回路24を通してSDRAM26から読み出し、読み出された音声データをSRAM40aに蓄積する。SRAM40aに蓄積された音声データはその後D/A変換機42によってアナログ音声信号に変換され、変換された音声信号がスピーカ44から出力される。
このような処理が繰り返されることで、再生動画像がモニタ30に表示され、この再生動画像に同期する音声信号がスピーカ44から出力される。
撮影モードが選択されたとき、CPU52は、ROM54に記憶された制御プログラムに従って、図13〜図19に示す撮影処理タスクと図20〜図21に示すBG処理タスクとを実行する。
まず図13を参照して、ステップS1では撮影モード決定処理を行う。具体的には、複数の撮影モードを示すメニューをモニタ30に表示し、メニューキー52の操作に応答して所望の撮影モードを決定する。撮影モードが決定されるとステップS3に進み、決定された撮影モードを示す撮影モード情報を作成する。設定情報は、たとえば“解像度:VGA”,“フレームレート:30fps”,“音響方式:モノラル”,“ビットレート:8ビット”,“サンプリングレート:8040Hz”とされる。ステップS5では、今回の撮影処理によって作成するムービファイルのファイル名を決定する。ファイル名は、たとえば“VCLP0003.MOV”とされる。作成/決定された撮影モード情報およびファイル名は、レジスタrgstに登録される。
ステップS7では、各種変数を初期化する。具体的には、変数i,frmcnt,flsz,BG_RemData,pre_flsz,t_szおよびaud_szの各々を“0”に設定し、変数trgt_szを最大値MAXに設定し、そして変数audsz_fpsを理論値LGに設定する。
ここで、変数iおよびfrmcntは、いずれもフレーム番号を示す変数である。変数iは垂直同期信号に応答してインクリメントされ続け、変数frmcntは垂直同期信号に応答して“0”〜“3”の間で循環的に更新される。変数frmcntがとる数値“0”〜“3”のうち、実際に意味を持つのは“0”〜“2”である。上述のように、3フレームのJPEGデータによって1つの画像チャンクが形成される。変数frmcntは、注目するJPEGデータが画像チャンクの何番目のデータであるかを特定するために使用される。
変数flszは、JPEG圧縮によって生成されたJPEG生データのトータルサイズ値を示す変数である。変数BG_RemDataは、“ファイル書き込み”の指示が図4に示す指示リスト52aに設定されたが未だ記録媒体50に記録されていないJPEG生データのサイズを示す変数である。変数pre_flszは、記録媒体50に既に記録されたJPEG生データのトータルサイズ値を示す変数である。
変数trgt_szは、各フレームのYUVデータを圧縮するときの目標サイズ値を示す変数であり、変数t_szは、この目標サイズ値の算出に使用される変数である。
変数aud_szは取り込まれた音声データのトータルサイズ値(バイト)を示す変数であり、変数audsz_fpsは1フレーム相当の音声データのサイズ値を示す変数である。ただし、変数audsz_fpsとして設定される理論値LGは、ソフトウェア計算上のサンプリングレートに基づいて決定された1フレーム相当の音声データのサイズ値である。たとえば、決定された撮影モードの実際のサンプリングレートが8043Hzであれば、ソフトウェア計算上のサンプリングレートは8040Hzとされ、理論値LGは268(=8040/30)バイトとされる。なお、8040Hzという数値は、ハードウェア上でのデータ転送が1ワード(=4バイト)単位で実行されること、および理論値LGを整数で表現できることを根拠とするものである。
ステップS9では、スルー画像表示を行うべく、TG14,信号処理回路22およびビデオエンコーダ28の各々に処理命令を与える。モニタ30には、被写体のスルー画像が表示される。スルー画像が表示されている状態でオペレータによってシャッタボタン58が押されると、ステップS11〜S19の各々で“BG処理開始”,“ファイル作成”,“テーブル作成”および“ファイルオープン”を図4に示す指示リスト52aのリスト番号“0”〜“3”に設定する。
表1を参照して、“BG処理開始”ではコマンドとしてFILE_STRTが設定され、“ファイル作成”ではコマンド,パラメータ1および2としてFILE_CREATE,ドライブ番号(記録媒体44を駆動するドライブの番号)およびファイルパスが設定される。また、“テーブル作成”ではコマンドおよびパラメータ1としてFILE_SET_ALLOCおよびドライブ番号が設定され、“ファイルオープン”ではコマンド,パラメータ1および2としてFILE_OPEN,ドライブ番号およびファイルパスが設定される。“ファイル作成”で設定されるファイルパスにはサイズ情報とステップS25で決定されたファイル名とが含まれ、このサイズ情報およびファイル名がディレクトリエントリに書き込まれる。ただし、ムービファイルは未完成であるため、サイズ情報は“0”を示す。
ステップS19の処理が完了した後、SG16から垂直同期信号が出力されると、ステップS21でYESと判断し、ステップS23で変数iの値を判別する。ここで変数iが“1”以上の値であればそのままステップS31に進むが、変数iが“0”であればステップS25〜S29の処理を経てステップS31に進む。
ステップS25では、サムネイル画像の取り込み処理を行う。具体的には、自ら作成したJPEGヘッダHthをSDRAM26に書き込むとともに、信号処理回路22およびJPEGコーデック32の各々に間引き処理および圧縮処理を命令する。
信号処理回路22は、YUVデータの間引き処理を1フレーム期間にわたって行い、これによって生成されたサムネイルYUVデータをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。JPEGコーデック32は、このサムネイルYUVデータをバスB1およびメモリ制御回路24を通してSDRAM26から読み出し、読み出されたサムネイルYUVデータにJPEG圧縮処理を施してJPEG生データRthを生成し、そしてJPEG生データRthをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。JPEGヘッダHthおよびJPEG生データRthは、図2に示すようにSDRAM26にマッピングされる。
続くステップS27では、上述の撮影モード情報(解像度,フレームレート,音響方式,ビットレート,サンプリングレート)を含むヘッダ情報Hinfを作成し、このヘッダ情報HinfをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。ヘッダ情報Hinfは、図2に示すようにJPEGヘッダHthの上にマッピングされる。
こうしてムービファイルヘッダを形成するヘッダ情報Hinf,JPEGヘッダHthおよびJPEG生データRthがSDRAM26に格納されると、ステップS29で“ファイル書き込み”を図4に示す指示リスト52aのリスト番号“4”および“5”の欄に設定する。表1から分かるように、“ファイル書き込み”ではコマンド,パラメータ1,2,3および4としてFILE_WRITE,ハンドル番号(ファイルオープン処理によって獲得),SDRAMアドレス,データサイズおよびデータ種別が設定される。“ファイル書き込み”が2つ設定されるのは、SDRAM26上においてヘッダ情報HinfおよびJPEGヘッダHthは連続しているものの、JPEG生データRthは離れた位置に格納されているからである。
リスト番号“4”の欄では、SDRAMアドレスとしてヘッダ情報Hinfの開始アドレスが設定され、データサイズとしてヘッダ情報HinfおよびJPEGヘッダHthの合計サイズが設定され、そしてデータ種別として“ムービファイルヘッダ”が設定される。また、リスト番号“5”の欄では、SDRAMアドレスとしてJPEG生データRthの開始アドレスが設定され、データサイズとしてJPEG生データRthのサイズが設定され、そしてデータ種別として“ムービファイルヘッダ”が設定される。この結果、図8に示すムービファイルヘッダ上では、ヘッダ情報Hinf,JPEGヘッダHthおよびJPEG生データRthがこの順で連続することとなる。なお、上述のようにJPEGヘッダHthおよびJPEG生データRthによって、JPEGデータTHが形成される。
ステップS31では、JPEGコーデック32に圧縮処理命令を与える。この圧縮処理命令には、変数trgt_szに従う目標サイズ値が含まれる。JPEGコーデック32は、1フレーム分のYUVデータをバスB1およびメモリ制御回路24を通してSDRAM26から読み出し、読み出されたYUVデータに圧縮処理を施して目標サイズに近いサイズのJPEG生データを作成し、そして生成されたJPEG生データをバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。JPEG生データは、図2に示す要領でSDRAM26にマッピングされる。上述のように、同じフレームで得られたJPEGヘッダおよびJPEG生データによって当該フレームのJPEGデータが形成され、このJPEGデータの先頭および末尾にはマーカSOIおよびEOIが書き込まれる。
ステップS33では、1フレームに相当する音声データの取り込み処理を行うべく、信号処理回路38に処理命令を与える。信号処理回路38は、A/D変換器36から与えられかつSRAM38aに保持された1フレーム相当の音声データを、バスB1およびメモリ制御回路24を通してSDRAM26に書き込む。音声データは、図2に示す要領でSDRAM26にマッピングされる。信号処理回路38はまた、SDRAM26に書き込んだ音声データのサイズ値つまり取り込みサイズ値をCPU52に返送する。このため、ステップS35では数1に従う演算を実行し、返送された取り込みサイズ値を変数aud_szに積算する。
[数1]
aud_sz=aud_sz+取り込みサイズ値
数1の演算が完了すると、ステップS37でJPEG圧縮の完了の有無を判別する。JPEGコーデック32は、ステップS31の圧縮命令に基づくJPEG圧縮が完了すると、生成されたJPEG生データのサイズ値つまり圧縮サイズ値と圧縮完了信号とをCPU46に返送する。このため、ステップS37では、圧縮完了信号が返送されたときにYESと判断される。
ステップS39では、返送された圧縮サイズ値を変数flszに加算するべく、数2の演算を実行する。
[数2]
flsz=flsz+圧縮サイズ値
ステップS41では、自ら作成したJPEGヘッダをバスB1およびメモリ制御回路24を通してSDRAM26に書き込み、続くステップS43では、現フレームのJPEGデータのインデックス情報をバスB1およびメモリ制御回路24を通してSDRAM26に書き込む。JPEGヘッダは図2に示す要領でSDRAM26にマッピングされ、インデックス情報は図3に示す要領でSDRAM26にマッピングされる。
上述のように、ムービファイルのインデックスチャンクでは、JPEGデータのファイル上の位置およびサイズは1フレーム毎に管理される。このため、ステップS43では、1フレームのJPEGデータの位置情報およびサイズ情報をインデックス情報として作成する。また、ムービファイル上では3フレーム分のJPEGデータによって1つの画像チャンクが形成される。このため、ステップS43では、現フレームが連続する3フレームの何番目であるかを変数frmcntから特定し、これによってインデックス情報をSDRAM26のどの位置に作成するかを決定する。
ステップS45では、現フレームのJPEG生データおよびJPEGヘッダのアクセス情報を図5に示すアクセス情報テーブル52b内に作成する。つまり、SDRAM26に存在する現フレームのJPEG生データの先頭アドレス情報およびサイズ情報を現フレームのJPEG生データのアクセス情報として作成し、SDRAM26に存在する現フレームのJPEGヘッダの先頭アドレス情報およびサイズ情報を現フレームのJPEGヘッダのアクセス情報として作成する。そして作成した各々のアクセス情報をアクセス情報テーブル52bに設定された変数iに割り当てる。
ステップS45の処理が完了すると、ステップS47で変数iを現撮影モードのフレームレート値FPSと比較する。現撮影モードのフレームレートが30fpsであれば、フレームレート値FPSは“30”となり、変数iは“30”と比較される。そして、i<FPSであればそのままステップS83に進むが、i≧FPSであればステップS49〜81の処理を経てステップS81に進む。
ステップS49では変数frmcntが“2”未満かどうか判断し、YESであれば、数3の条件が満たされるかどうかをステップS51で判断する。一方、変数frmcntが“2”以上であれば、数4の条件が満たされるかどうかをステップS59で判断する。
[数3]
aud_sz−(audsz_fps*(i+1))>audsz_fps
[数4]
(audsz_fps*(i+1))−aud_sz>audsz_fps
aud_szは、実際に取り込まれた音声データのトータルサイズ値であり、audsz_fps*(i+1)は、取り込み開始からのフレーム数と理論値LGとの掛け算値である。数3および数4のいずれにおいても、両数値の差分値が理論値LGと比較される。そして、差分値が理論値LG以下である限りはそのままステップS63に進むが、差分値が理論値LGを上回ると、ステップS53〜S57を経て、あるいはステップS61を経て、ステップS63に進む。
たとえば、実際のサンプリングレートが8043Hzであり、ソフトウェア計算上のサンプリングレートが8040Hzであれば、両者の誤差は3Hzである。すると、1秒に相当する音声データのサイズ値に3バイトのずれが発生する。理論値LGは268バイトであるため、約90秒に1回の割合で数3の条件が満たされ、ステップS53〜S57が処理される。また、実際のサンプリングレートが8034Hzでソフトウェア計算上のサンプリングレートが8040Hzであれば、両者の誤差は6Hzとなる。このときは、約45秒に1回の割合で数4の条件が満たされ、ステップS61の処理が実行される。
ステップS53では、変数iおよびfrmcntの各々をインクリメントする。ステップS55では前回と同じ画像インデックス情報つまり直前のステップS43で作成したインデックス情報と同じインデックス情報をSDRAM26内に作成し、ステップS57では前回と同じアクセス情報つまり直前のステップS45で作成したアクセス情報と同じアクセス情報をアクセス情報テーブル52b内に作成する。ステップS57の処理が完了すると、ステップS63に進む。一方、ステップS61では変数iおよびfrmcntの各々をディクリメントし、その後ステップS63に進む。
したがって、インデックス情報が図9(A)に示す要領でSDRAM26に設定されかつアクセス情報が図10(A)に示す要領でアクセス情報テーブル52bに設定された後に数3に示す条件が満たされた場合、ステップS53〜S57の処理によって、同じJPEGデータのインデックス情報が図9(B)に示すようにSDRAM26に設定され、同じJPEGデータを形成するJPEG生データおよびJPEGヘッダのアクセス情報が図10(B)に示すようにアクセス情報テーブル52bに設定される。
図9(A)によれば、JPEGデータPのインデックス情報がSDRAM26に設定されている。この状態で、変数frmcntがインクリメントされ、かつ直前のステップS43で作成したインデックス情報が再度有効化されるため、図9(B)に示すようにJPEGデータPのインデックス情報が補間される。JPEGデータPのインデックス情報が補間された後は、図9(C)に示すようにJPEGデータP+1のインデックス情報が設定される。
図10(A)によれば、JPEG生データPおよびJPEGヘッダPのアクセス情報が変数i(=P)に割り当てられている。この状態で変数iがインクリメントされ、かつ直前のステップS45で作成したアクセス情報が再度有効化されるため、図10(B)に示すようにJPEG生データPおよびJPEGヘッダPのアクセス情報が変数i(=P+1)に割り当てられることになる。JPEG生データPおよびJPEGヘッダPのアクセス情報が補間された後は、図10(C)に示すようにJPEG生データP+1およびJPEGヘッダP+1のアクセス情報が変数i(=P+2)に割り当てられる。
一方、インデックス情報が図11(A)に示す要領でSDRAM26に設定されかつアクセス情報が図12(A)に示す要領でアクセス情報テーブル52bに設定された後に数4に示す条件が満たされた場合、ステップS61の処理によって、図11(B)に示すように、インデックス情報の一部が後続のインデックス情報によって上書きされ、図12(B)に示すようにアクセス情報の一部が後続のアクセス情報によって上書きされる。
図11(A)によれば、JPEGデータPのインデックス情報とJPEGデータP+1のインデックス情報とが、SDRAM26に設定されている。この状態で変数frmcntがディクリメントされるため、次回のステップS43の処理によって、図11(B)に示すように、JPEGデータP+1のインデックス情報がJPEGデータP+2のインデックス情報によって上書きされる。これによって、JPEGデータP+1のインデックス情報が間引かれる。JPEGデータP+2のインデックス情報の次は、図11(C)に示すようにJPEGデータP+3のインデックス情報が設定される。
図12(A)によれば、JPEG生データPおよびJPEGヘッダPのアクセス情報とJPEG生データP+1およびJPEGヘッダP+1のアクセス情報とが、アクセス情報テーブル52bに設定されている。この状態で変数iがディクリメントされるため、次回のステップS45の処理によって、図12(B)に示すように、JPEG生データP+1およびJPEGヘッダP+1のアクセス情報がJPEG生データP+2およびJPEGヘッダP+2のアクセス情報によって上書きされる。これによって、JPEGデータP+1のアクセス情報が間引かれる。JPEG生データP+2およびJPEGヘッダP+2のアクセス情報の次は、図12(C)に示すようにJPEG生データP+3およびJPEGヘッダP+3のアクセス情報が設定される。
なお、ステップS53で変数iがインクリメントされることで、次回以降のステップS51ではNOとの判断が継続する。また、ステップS61で変数iがディクリメントされることで、次回以降NOステップS59ではNOとの判断が継続する。
ステップS63では、変数iをフレームレート値FPSで割り算したときの余り(=i%FPS)を判別する。ここで余りが“0”でなければ、そのままステップS83に進むが、余りが“0”であればステップS65〜S81の処理を経てステップS83に進む。余りが“0”となるのは30フレームの1回であるため、ステップS65〜S81の処理は30フレームに1回の割合で実行される。
ステップS65では変数flszおよびpre_flszに数5に従う演算を施し、ステップS67では数5によって求められた差分値Δflszと変数BG_RemDataとフレームレート値FPSとに数6に従う演算を施す。
[数5]
Δflsz=flsz−pre_flsz
[数6]
t_sz=(Δflsz−BG_RemData)/FPS
数5において、変数flszはJPEG圧縮によって得られたJPEG生データのトータルサイズ値であり、変数pre_flszは記録媒体50に既に記録されたJPEG生データのトータルサイズ値である。後述するように変数pre_flszは30フレームに1回に割合でしか更新されず、数5に従う演算もまた30フレームに1回の割合でしか更新されないため、差分値Δflszは最新の30フレームで生成されたJPEG生データのトータルサイズを示す。
数6において、変数BG_RemDataは、“ファイル書き込み”の指示が指示リスト52aに設定されたが未だ記録媒体50に記録されていないJPEG生データのトータルサイズ値である。この変数BG_RemDataは、“ファイル書き込み”の処理に要する時間が短いほど小さくなり、逆に“ファイル書き込み”の処理に要する時間が長いほど大きくなる。差分値Δflszからこのような変数BG_RemDataを引き算した引き算値は、現時点の“ファイル書き込み”の処理速度を反映し、この引き算値をフレームレート値FPSで割り算した割り算値は、現時点の処理速度の下での変数BG_RemDataの変動量が規定の範囲内に収まる圧縮サイズ値となる。かかる圧縮サイズ値が、変数t_szとして算出される。
ここで、“ファイル書き込み”の処理速度の変動要因としては、CPU50aの処理速度やバッファメモリ50bの容量のような記録媒体50の特性のほかに、バスB1の占有率やBG処理タスク以外のタスクの処理状況などが考えられる。
上述のように、ズームキー64の操作によって“1.0”よりも大きいズーム倍率が選択されると、生画像データは、SDRAM26に一旦格納されてから信号処理回路22に入力される。このとき、生画像データは、バスB1を介してSDRAM26に与えられ、バスB1を介して信号処理回路22に戻される。バスB1の占有率は生画像データの転送処理によって上昇し、これによって“ファイル書き込み”の処理速度が低下してしまう。
また、カメラのパンニングやチルティングによって被写体の明るさや色あいが大きく変化すると、撮影条件制御タスクが起動して、絞り量,露光時間,白バランス調整ゲインなどが調整される。各々のタスクを同時に実行することはできないため、撮影条件制御タスクが起動すると、BG処理タスクは中断され、これによって“ファイル書き込み”の処理速度が低下してしまう。
この実施例では、かかる“ファイル書き込み”の処理速度の変動を考慮して、変数t_szを周期的に更新するようにしている。変数t_szの更新の結果、後述するように目標サイズ値ひいてはJPEG圧縮率が更新される。
ステップS69では算出された変数t_szを変数trgt_szと比較し、t_sz<trgt_szであれば、ステップS71で変数t_szを最小値MINと比較する。そして、t_sz≧MINであればそのままステップS79に進むが、t_sz<MINであればステップS73で変数t_szを最小値MINに更新してからステップS79に進む。一方、ステップS69でt_sz≧trgt_szと判断されると、ステップS75で変数t_szを最大値MAXと比較する。そして、t_sz≦MAXであればそのままステップS79に進むが、t_sz>MAXであればステップS77で変数t_szを最大値MAXに更新してからステップS79に進む。ステップS79では、変数t_szを変数trgt_szとして設定する。
数6によれば、変数BG_RemDataが大きいと変数t_szが小さくなり、逆に変数BG_RemDataが小さいと変数t_szが大きくなる。したがって、“t_sz<trgt_sz”は、未記録のJPEGデータ量が多いこと、即ち“ファイル書き込み”の処理速度が遅いことを意味する。また、“t_sz≧trgt_sz”は、未記録のJPEGデータ量が少ないこと、即ち記録媒体50の記録特性が優れていることを意味する。
そこで、変数t_szが変数trgt_szを下回るときは、より小さい目標サイズ値(より高いJPEG圧縮率)を次の1秒間で有効化するべく、変数t_szが変数trgt_szとして設定する。これによって、次回の1秒間で生成されるJPEGデータのサイズは今回の1秒間で生成されたJPEGデータよりも小さくなり、“ファイル書き込み”の処理速度の低下に起因する処理の破綻が回避される。
一方、変数t_szが変数trgt_sz以上であるときは、より大きな目標サイズ値(より低いJPEG圧縮率)を次の1秒間で有効化するべく、変数t_szを変数trgt_szに設定する。これによって、次回の1秒間で生成されるJPEGデータのサイズは今回の1秒間で生成されたJPEGデータよりも大きくなり、圧縮処理に起因する画質の劣化が低減される。
ステップS81では、変数flszおよびBG_RemDataに数7の演算を施して、変数pre_flszを更新する。
[数7]
pre_flsz=flsz−BG_RemData
数7によれば、これまでに生成されたJPEG生データのトータルサイズ値から、未記録のJPEG生データのトータルサイズ値が引き算される。この演算もまた30フレーム毎に実行されるため、変数pre_flszは30フレームに1回の割合で更新される。次回つまり30フレーム後の数5の演算では、こうして更新された変数pre_flszが最新の変数flszから引き算される。
ステップS83では変数frmcntをインクリメントし、続くステップS85ではインクリメントされた変数frmcntの値を判別する。そして、変数frmcntが“1”または“2”であればそのままステップS95に進むが、変数frmcntが“3”であれば、ステップS87〜S93の処理を経てステップS95に進む。
ステップS87では音声データのインデックス情報をSDRAM26に書き込む。図7に示すムービファイル上では、3フレームに相当する時間の音声データによって1つの音声チャンクが形成される。また、インデックスチャンクでは、音声データのファイル上の位置およびサイズは3フレームに相当する時間毎に管理される。このため、ステップS85では、最新の3フレームに相当する音声データの位置情報およびサイズ情報を作成し、作成したインデックス情報を図3に示すようにSDRAM26に書き込む。
続くステップS89では音声データのアクセス情報をアクセス情報テーブル52bに書き込む。つまり、SDRAM26に存在する3フレーム相当の音声データの先頭アドレス情報とサイズ情報とをアクセス情報として作成し、作成したアクセス情報をアクセス情報テーブル52bに書き込む。このとき、アクセス情報は、注目する3フレームのJPEGデータのアクセス情報に関連付けられる。
ステップS91では、アクセス情報テーブル52bに設定された3フレーム分のJPEG生データと、3フレーム分のJPEGヘッダのアクセス情報と、3フレーム相当の音声データのアクセス情報とを参照して、“ファイル書き込み”を図4に示す指示リスト52aに設定する。図2に示すように、3フレーム相当の音声データはSDRAM26上で連続するが、3フレームのJPEG生データおよびJPEGヘッダはSDRAM26上で離散的に分布する。このため、ステップS91では、合計7つ分の“ファイル書き込み”を指示リスト52aに設定する。
この7つの“ファイル書き込み”のうち1番目に設定される“ファイル書き込み”では、SDRAMアドレスは注目する3フレーム相当の音声データの開始アドレスを示し、データサイズは注目する3フレーム相当の音声データのサイズを示し、そしてデータ種別は音声チャンクを示す。ここで、開始アドレスおよびデータサイズは、ステップS87で作成されたアクセス情報を形成するSDRAMアドレスおよびデータサイズに等しい。
2番目,4番目および6番目に設定される“ファイル書き込み”では、SDRAMアドレスは注目する3フレームのJPEGヘッダの開始アドレスを示し、データサイズは注目する3フレームのJPEGヘッダのサイズを示し、そしてデータ種別はJPEGヘッダを示す。ここで、開始アドレスおよびデータサイズは、ステップS45またはS57で作成された最新3フレームのJPEGヘッダのアクセス情報を形成するSDRAMアドレスおよびデータサイズに等しい。
3番目,5番目および7番目に設定される“ファイル書き込み”では、SDRAMアドレスは注目する3フレームのJPEG生データの開始アドレスを示し、データサイズは注目する3フレームのJPEG生データのサイズを示し、そしてデータ種別はJPEG生データを示す。ここで、開始アドレスおよびデータサイズは、ステップS45またはS57で作成された最新3フレームのJPEG生データのアクセス情報を形成するSDRAMアドレスおよびデータサイズに等しい。
このような指示リスト52aの指示がBG処理タスクで実行されることで、3フレーム相当の音声データと3フレームのJPEGデータとがメモリ制御回路24によってSDRAM26から読み出され、バスB1およびI/F回路46を通して記録媒体50に与えられる。この結果、音声チャンクおよび画像チャンクが図8に示すムービファイル上で交互に分布することになる。
ステップS93では、ステップS91で指示リスト52aに設定した3フレームのJPEG生データのサイズ値を変数BG_RemDataに加算するべく、数8の演算を実行する。
[数8]
BG_RemData=BG_RemData+JPEG生データサイズ値
ステップS95ではフレーム番号iをインクリメントし、続くステップS97ではシャッタボタン58の操作の有無を判別する。シャッタボタン58が押されない限りステップS21〜S95の処理を繰り返し、各フレームで生成されたJPEGヘッダ,JPEG生データおよび音声データは、SDRAM26に図2に示す要領でマッピングされる。
シャッタボタン58が押されるとステップS99に進み、変数frmcntの値を判別する。ここで変数frmcntが“3”であればそのままステップS103に進むが、変数frmcntが“1”または“2”であればステップS101で“ファイル書き込み”を指示リスト52aに設定してからステップS103に進む。
変数frmcntが“1”の場合、最後の音声チャンクおよび画像チャンクは1フレーム分の音声データおよびJPEGデータによって形成され、指示リスト52aには合計3つの“ファイル書き込み”が設定される。変数frmcntが“2”の場合、最後の音声チャンクおよび画像チャンクは2フレーム分の音声データおよびJPEGデータによって形成され、指示リスト52aには合計5つの“ファイル書き込み”が設定される。これによって、1フレーム分または2フレーム分の音声データからなる音声チャンクと、1フレームまたは2フレームのJPEGデータからなる画像チャンクとが、ムービファイルに形成される。
ステップS103では、図3に示すインデックス情報をムービファイルに書き込むべく、“ファイル書き込み”を指示リスト52aに設定する。ここで設定されるSDRAMアドレスおよびデータサイズは、図3に示すインデックス情報の開始アドレスおよび合計サイズを示し、データ種別はムービファイルヘッダを示す。BG処理によってこの“ファイル書き込み”が実行されることで、図3に示す全てのインデックス情報を含むインデックスチャンクがムービファイルの末尾に形成される。
ステップS105では、インデックス情報に含まれるサイズ情報に基づいてムービファイルのトータルサイズを算出し、算出されたトータルサイズデータをSDRAM26に書き込む。続くステップS107〜S111では、“ファイル書き込み”,“ファイルクローズ”および“BG処理終了”を指示リスト52aに設定する。“ファイル書き込み”で設定されるSDRAMアドレスおよびデータサイズはトータルサイズデータの先頭アドレスおよびデータサイズを示し、データ種別はムービファイルヘッダを示す。また、“ファイルクローズ”ではFILE_CLOSEがコマンドとして設定され、“BG処理終了”ではFILE_ENDがコマンドとして設定される。
“ファイル書き込み”がBG処理によって実行されることで、トータルサイズ値がムービファイルヘッダのサイズ情報に追加される。また、“ファイルクローズ”がBG処理によって実行されることで、ディレクトリエントリのサイズ情報(ステップS15の処理に基づいて書き込まれたサイズ情報)が“0”からトータルサイズ値に更新され、かつ今回作成されたムービファイルの書き込み領域にリンクが形成されるようにFAT領域501cのFAT情報が更新される。BG処理は、“BG処理終了”によって終了する。
なお、トータルサイズ値をムービファイルヘッダに書き込むためには、書き込み先アドレスを更新する必要があり、実際には、ステップS105の“ファイル書き込み”の設定に先立って“シーク処理”が指示リスト52aに設定される。
BG処理タスクは、図20〜図21に示すフロー図に従う。まずステップS121で読み出し先のリスト番号Lを“0”に設定し、続くステップS123ではリスト番号Lから読み出されたコマンドがFILE_STRTであるかどうか判断する。ここでYESであれば、ステップS125でリスト番号Lをインクリメントし、インクリメント後のリスト番号Lから読み出されたコマンドの内容をステップS127,S131,S135,S139,S147の各々で判別する。
読み出されたコマンドがFILE_CREATEであればステップS127でYESと判断し、ステップS129でファイル作成処理を行う。具体的には、パラメータ1に設定されたドライブ番号によって記録媒体50を特定し、パラメータ2に設定されたファイルパスに基づいて記録媒体50のディレクトリエントリにファイル名とサイズ0を示すサイズ情報とを書き込む。処理を終えると、ステップS125に戻る。
読み出されたコマンドがFILE_SET_ALLOCであればステップS131でYESと判断し、ステップS133でテーブル作成処理を行う。つまり、パラメータ1に設定されたドライブ番号によって記録媒体50を特定し、FAT情報を参照して図7に示す空き領域テーブル52cを作成する。処理を終えると、ステップS125に戻る。
読み出されたコマンドがFILE_OPENであればステップS135からステップS137に進み、ファイルオープン処理を行う。つまり、パラメータ1に設定されたドライブ番号によって記録媒体50を特定し、パラメータ2に設定されたファイルパスに基づいてファイルを特定し、そしてこのファイルに割り当てるハンドル番号を作成する。作成したハンドル番号は撮影処理に用いられる。処理を終えると、ステップS125に戻る。
読み出されたコマンドがFILE_WRITEであればステップS139からステップS141に進み、ファイル書き込み処理を行う。具体的には、パラメータ1に設定されたハンドル番号によって書き込み先のムービファイルを特定し、パラメータ2および3に設定されたSDRAMアドレスおよびデータサイズに従って読み出し開始アドレスおよび読み出しサイズを特定する。そして、読み出し開始アドレスおよび読み出しサイズに基づいてSDRAM26からワード単位でデータを読み出し、読み出したデータを書き込み先のムービファイル情報とともに記録媒体50のCPU50aに与える。
パラメータ3に設定された読み出しサイズが記録媒体50に設けられたバッファメモリ50bよりも大きければ、バッファメモリ50bが満杯となった時点でCPU50aからCPU52にBUSY信号が返送される。ステップS141の処理は、BUSY信号に応答して中断される。バッファメモリ50bからハードディスク50cへのデータ転送によってバッファメモリ50bに十分な空き容量が確保されると、CPU50aからCPU52にREADY信号が返送される。ステップS141の処理は、このREADY信号に応答して再開される。
パラメータ3に設定された読み出しサイズに相当するデータの記録媒体50への転送が完了すると、この読み出しサイズを積算するとともに、1クラスタ分の書き込みが完了する毎に書込クラスタのリンク状態を示すFAT情報を作成する。データサイズの積算値およびFAT情報は、SDRAM26に保持される。
ステップS143では、パラメータ4に設定されたデータ種別を判別する。ここでデータ種別が“JPEG生データ”でなければそのままステップS125に戻るが、データ種別が“JPEG生データ”であれば、ステップS145で数9に従う演算を実行してからステップS125に戻る。
[数9]
BG_RemData=BG_RemData−JPEG生データサイズ値
数9によれば、パラメータ3に設定されたデータサイズが、変数BG_RemDataから引き算される。これによって、変数BG_RemDataが、指示リスト52aに設定されたが未だ記録媒体50に記録されていないJPEG生データのサイズを示すこととなる。
読み出されたコマンドがFILE_CLOSEであればステップS147からステップS149に進み、ファイルクローズ処理を行う。具体的には、オープンしているムービファイルのファイル名に割り当てられたサイズ情報をSDRAM26に保持されたトータルサイズ値によって更新し、SDRAM26によって保持されたFAT情報によってFAT領域501cのFAT情報を更新する。処理が完了すると、ステップS125に戻る。
読み出されたコマンドがFILE_ENDであれば、ステップS147でNOと判断し、ステップS121に戻る。BG処理は待機状態に移行する。
以上の説明から分かるように、動画像を形成する複数フレームのYUVデータは、マルチタスクOSを搭載したCPU52の制御の下、圧縮状態で記録媒体50に記録される。ここで、CPU52によって実行される複数のタスクは、複数フレームのYUVデータの圧縮処理に関与する撮影処理タスク、および複数フレームのJPEGデータの記録処理に関与するBG処理タスクを含む。さらに、撮影処理タスクは、JPEGデータの記録処理速度を周期的に判別する判別処理(S63)、およびその判別結果に基づいてYUVデータの圧縮率を変更する変更処理(S79)を含む。
マルチタスクOSでは、複数のタスクの各々は時分割でしか実行されない。すると、各々のタスクの負荷変動によって、JPEGデータの記録処理速度が変動する。また、ズーム回路22aは、ズームキー64によって拡大ズームが選択されたとき、生画像データをバスB1およびメモリ制御回路24を通してSDRAM26に一旦書き込み、一部の生画像データをバスB1およびメモリ制御回路24を通して読み出し、そして読み出された生画像データに拡大ズームを施す。このため、拡大ズームが選択されたときも、バスB1の占有率の低下に起因して記録処理速度が低下する。そこで、この実施例では、記録処理速度を周期的に判別し、判別結果に応じてYUVデータの圧縮率を変更する。これによって、動画像の連続記録可能時間の制御が可能となる。
なお、この実施例では、JPEG方式で画像圧縮を行うようにしているが、JPEG方式に代えてMPEG方式を採用し、目標サイズ値をGOP単位で更新するようにしてもよい。
また、この実施例では、目標サイズ値を30フレーム毎に更新するようにしているが、ソフトウェア計算を容易にするために、32フレーム,64フレーム,128フレームのような2のべき乗に相当するフレーム数毎に目標サイズを更新するようにしてもよい。
さらに、この実施例では、フレーム数を調整するかどうかの判断に用いる閾値を1フレーム相当の音声データ量(=268バイト)に設定するようにしているが、この閾値は、268バイトの整数倍としてもよい。
また、この実施例では、記録処理を行うときにJPEGデータのフレーム数を調整するようにしているが、フレーム数の調整は再生処理の際に行うようにしてもよい。
さらに、この実施例では、アクセス情報およびインデックス情報の両方に間引き/補間を施すようにしているが、インデックス情報のみに基づいてJPEGデータの再生順序を制御する場合は、インデックス情報のみに間引き/補間を施すようにしてもよい。これによって、アクセス情報の間引き処理に起因するJPEGデータの欠落を防止することができる。
さらにまた、この実施例では、動画像信号の記録方式としてFAT方式を採用しているが、これに代えてUDF(Universal Disk Format)方式を採用してもよい。
さらにまた、この実施例ではディジタルビデオカメラを用いて説明しているが、この発明は、たとえばTV番組を録画する据え置き型のハードディスクレコーダにも適用できることは言うまでもない。