図1に示すこの発明の一実施例であるビデオカメラ10は、タイムスタンプを用いることなく画像(動画)データおよび音声データの同期を確保しようとするものである。再生時に画像と音声との同期を取るために、記録時に音声データにこの音声データの入力タイミングにおいて表示されているスルー画像データのフィールド番号情報,垂直ライン位置情報および水平画素位置情報(これらを“同期サンプル情報”と呼ぶ)を付加する。そして、再生時には、音声フレームから同期サンプル情報を取り出し、取り出された同期サンプル情報と、現在再生されている画像のフィールド番号,垂直ライン位置および水平画素位置とから音声と画像との同期のずれを算出する。このずれが許容範囲を超えるときには、画像を一時停止するかもしくは画像をスキップすることによって画面数を調整してずれを修正する。
この実施例のビデオカメラ10では、上述の構成によって画像と音声との同期をとるので、従来とは違って時計回路が必要でなく、簡単な回路構成で画像と音声との同期を実現できる。
図1を参照して、ビデオカメラ10は、イメージセンサ12を含む。被写界の光学像は、図示しない光学レンズを介してこのイメージセンサ12の受光面に照射される。
オペレータが操作パネル42に設けられたモード切換スイッチ42mdによってカメラモードを選択すると、CPU40によってスルー画像処理が実行される。イメージセンサ12は被写界の生画像信号を1/30秒ごとに出力し、CDS/AGC/AD回路14は出力された生画像信号にノイズ除去,レベル調整およびA/D変換の一連の処理を実行する。CDS/AGC/AD回路14からはディジタル信号である生画像データが出力される。信号処理回路16は、出力された生画像データに白バランス調整,色分離,YUV変換などの信号処理を施し、これによってYUV形式の画像データが生成される。生成された画像データは、メモリ制御回路32によってSDRAM30の伸長画像記録領域に書き込まれる。伸長画像記録領域は、AおよびBの2つのバンクに区切られており、画像データの第1フレームは、まず、バンクAに書き込まれる。1/30秒ごとにバンクが切り換えられ、第2フレームはバンクBに書き込まれ、第3フレームは再びバンクAに書き込まれる。
ビデオエンコーダ22は、SDRAM30のバンクに書き込まれた画像データを1/60秒ごとにメモリ制御回路32を通してプログレッシブ方式で読み出す。まずバンクAから画像データを読み出し、次にバンクBから画像データを読み出す。SDRAM30のバンクAもしくはバンクBから読み出された画像データはビデオエンコーダ22によってコンポジットビデオ信号に変換されて640画素×240ラインのサイズに縮小される。この縮小されたコンポジットビデオ信号が疑似インタレーススキャン方式でLCD24に与えられる。これによって、1/60秒(16.6ミリ秒)に1フィールドの割合で画像がLCD24に表示される。
また、ビデオエンコーダ22では、現フィールドの何ライン目までの描画が終了したかをVカウンタ22vを用いてカウントし、現ラインの何画素目までを描画し終えたかをHカウンタ22hを用いてカウントしている。Vカウンタ22vの最高値は240であり、Hカウンタ22hの最高値は640である。
操作パネル42に設けられたシャッタボタン42stがオペレータによって操作されると、CPU40は、信号処理回路20を能動化するとともに、画像圧縮(符号化)命令および音声圧縮(符号化)命令の各々を周期的にMPEG−4コーデック34に与える。
能動化された信号処理回路20は、マイクロフォン18から入力される音声信号を48kHzの周期でサンプリングしてディジタル信号である音声データに変換し、この音声データをメモリ制御回路32を通してSDRAM30に書き込む。48kHzのサンプリング処理では、1024サンプルによって約21ミリ秒分の音声データが生成される。詳しくは後述するが、音声データは1024サンプル単位で音声フレームというデータに加工される。CPU40は、SDRAM30への音声データの書き込み量を監視しており、1024サンプル分の音声データの書き込みが開始されるごとに、書き込み開始のタイミングでビデオエンコーダ22からVカウンタ22vのカウント値(垂直ライン位置情報)およびHカウンタ22hのカウント値(水平画素位置情報)を取得する。
また、CPU40はLCD24に表示されるスルー画像の画像フィールド番号を画像の表示開始時からフィールドカウンタ40fによってカウントしている。このフィールドカウンタ40fのカウント値(フィールド番号情報)は、ビデオエンコーダ22から取得された垂直ライン位置情報および水平画素位置情報とともに、1024サンプルごとの音声データに対応付けられてRAM46上のテーブル46tに記録される。
画像フィールドは1/60秒(16.6ミリ秒)ごとに生成され、音声フレームは21ミリ秒ごとに生成されるため、画像フィールドと音声フレームとの発生タイミングは図2に示すようになる。図2からわかるように、音声フレーム番号と音声フレームに同期サンプル情報として付加されるフィールド番号(情報)とは1対1の対応関係にはない。図2の例では、フィールド番号“4”が添付される音声フレームは存在しない。
MPEG−4コーデック34は、画像圧縮命令が与えられると、メモリ制御回路32を通してSDRAM30から音声データを随時読み出し、読み出した画像データにMPEG−4圧縮を施す。1回の画像圧縮命令によって1フレームの画像データが圧縮される。MPEG−4圧縮によって再生された圧縮画像データはメモリ制御回路32を通して再びSDRAM30に書き込まれる。
また、MPEG−4コーデック34は、音声圧縮命令が与えられると、メモリ制御回路32を通してSDRAM30から音声データを随時読み出す。そして、読み出した音声データにMPEG−4圧縮を施す。1回の音声圧縮命令によって1024サンプルの音声データが圧縮される。MPEG−4圧縮によって生成された圧縮音声データはメモリ制御回路32を通して再びSDRAM30に書き込まれる。
シャッタボタン42stが再度押されない限り、CPU40は、MPEG−4コーデック34に画像圧縮命令および音声圧縮命令を繰り返し与え、信号処理回路20を能動化し続ける。これによって、圧縮画像データおよび圧縮音声データがSDRAM30に蓄積されてゆく。
メモリカード38には、最初のシャッタボタン42stの操作に応答してMPEGファイルが新規に作成される。CPU40は、上述の圧縮処理の出力と並行して、SDRAM30に蓄積された圧縮画像データおよび圧縮音声データをメモリ制御回路32を通して読み出す。読み出された圧縮画像データおよび圧縮音声データは、I/F36を通してメモリカード38に与えられて記録される。
圧縮音声データは、SDRAM30から読み出されてメモリカード38に記録されるときに、図3に示すように、1024サンプルごとに音声データヘッダを有する音声フレームという単位にまとめられる。1024サンプルの音声データが音声フレームにまとめられると、RAM46に形成されたテーブル46tを参照して当該1024サンプルの音声データに対応する同期サンプル情報が特定され、特定された同期サンプル情報が音声フレームに付加される。図3には音声フレームが連続した状態で示されているが、メモリカード38に形成されるMPEGファイルには、圧縮画像データと圧縮音声データとが混在した状態で記録される。
圧縮画像データおよび圧縮音声データの記録が終了すると、総ファイルサイズ,総フレーム数,総音声サイズ,フレームレートなどの情報がMPEGファイルのファイルヘッダに書き込まれる。また、ファイルヘッダには第何画像フレームの画像データおよび第何音声フレームの音声データがどのアドレスに記録されているかとう情報を保持したテーブルが含まれている。このテーブルを参照することによって所望のフレームの画像データおよび音声データを読み出すことができる。
シャッタボタン42stがオペレータによって操作されると、CPU40は、信号処理回路20を不能化し、MPEG−4コーデック34への圧縮命令の出力を停止する。これによって、圧縮画像データおよび圧縮音声データの生成が終了し、その後、メモリカード38への圧縮画像データおよび圧縮音声データの書き込みが終了する。
このように、MPEGファイルに記録された音声データは1024サンプルごとに音声フレームという単位にまとめられ、各音声フレームには1024サンプルの音声データがSDRAM30に記録され始めたタイミングの画像データのフィールド番号,垂直ライン位置および水平画素位置を示す情報(同期サンプル情報)が付加されている。
オペレータがモード切換スイッチ42mdによって再生モードを選択し、かつ、ファイル選択キー42fsによって所望のMPEGファイルを選択すると、CPU40は、ファイルヘッダに含まれる上述のテーブルを参照して、第1フレームである圧縮画像データおよび第1音声フレームである圧縮音声データをメモリカード38から読み出す。読み出された圧縮画像データおよび圧縮音声データはメモリ制御回路32を通してSDRAM30に書き込まれる。
CPU40はまた、MPEG−4コーデック34に画像伸長(復号)命令および音声伸長(復号)命令を繰り返し与える。画像伸長命令は1/30秒(33ミリ秒)ごとに発行され、音声伸長命令は21ミリ秒ごとに発行される。
CPU40から音声伸長命令が与えられると、MPEG−4コーデック34は、メモリ制御回路32を通して圧縮音声データをSDRAM30から読み出し、読み出した圧縮音声データにMPEG−4伸長を施す。1回の音声伸長命令によって1フレームの圧縮音声データが伸長される。伸長された音声データは、メモリ制御回路32を通して再びSDRAM30に書き込まれる。信号処理回路26は、伸長音声データをメモリ制御回路32を通して読み出し、読み出した伸長音声データをアナログ信号に変換し、そして、変換した音声データをスピーカ28に与える。これによって、再生音声がスピーカ28から出力される。圧縮音声データは、順次メモリカード38から読み出され、MPEG−4コーデック34によって伸長されて、スピーカ28から出力される。これによって、途切れることなく音声がスピーカ28から出力される。
また、MPEG−4コーデック34は、CPU40から画像伸長命令が与えられると、メモリ制御回路32を通して圧縮画像データをSDRAM30から読み出す。読み出した圧縮画像データはMPEG−4伸長が施される。1回の画像伸長命令によって1フレームの圧縮画像データが伸長される。伸長された画像データはMPEG−4コーデック34が備えるバッファ34a(第1メモリ)に蓄積される。 バッファ34aに蓄積された1フレームの画像データは、1/30秒(33ミリ秒)ごとに読み出され、メモリ制御回路32を通してSDRAM30の伸長画像記録領域(第2メモリ)に記録される。伸長画像記録領域は、上述したように、AおよびBの2つのバンクに区切られており、伸長された画像データは、まず、バンクA(第1エリア)に記録される。1/30秒ごとにバンクが切り換えられ、次に伸長された第2画像フレームはバンクB(第2エリア)に記録され、第3画像フレームは再びバンクAに記録される。
ビデオエンコーダ22は、1/60秒ごとにメモリ制御回路32を通してSDRAM30のバンクから伸長された画像データをプログレッシブスキャン方式によって読み出す。まず、バンクAに記録されている画像データを読み出し、次にバンクを切り換えてバンクBに記録されている画像データを読み出す。ビデオエンコーダ22は、SDRAM30から読み出した画像データをコンポジットビデオ信号に変換して640画素×240ラインのサイズに縮小し、縮小した画像データを疑似インタレーススキャン方式でLCD24に与える。この疑似インタレーススキャン方式によって、LCD24には1/60秒に1フィールドの割合で画像が表示される。
また、ビデオエンコーダ22は、記録時と同様に再生時においても、Vカウンタ22vおよびHカウンタ22hを用いて、現フィールドの何ライン目までの描画が終了したか、および現ラインの何画素目までを描画し終えたかをそれぞれカウントしている。さらに、第何番目の画像フィールドが描画されているかがCPU40のフィールドカウンタ40fによってカウントされている。
図2に示したように、音声フレームと画像フィールドとは1対1の対応関係にないので、音声フレームと画像フィールドとの同期を確保する仕組みが必要になる。音声は1音声フレームずつ順番に逐次の再生を行い、途中でスキップされたり停止されたりすることはない。一方、画像は、現在再生されている画像データの描画位置(フィールドカウンタ40fの値,Vカウンタ22vの値およびHカウンタ22hの値)と音声フレームに付加されている同期サンプル情報(画像フィールド番号情報,垂直ライン位置情報および水平画素位置情報)とから音声フレームと画像フィールドとのずれが算出され、ずれが許容範囲外であるときには、ずれを修正するためにスキップされたり停止されたりする。
図4を用いてより具体的に説明する。メモリカード38から音声フレームが読み出されると、読み出された音声フレームから同期サンプル情報(画像フィールド番号情報,垂直ライン位置情報および水平画素位置情報)が抽出される。この同期サンプル情報が示す画面上の位置をA点とする。このA点は、この音声フレームがサンプリングされたときに再生されていた画像の画素の位置を示している。つまり、この音声フレームがサンプリングされていたときには、第Xフィールドの第(Xa+1)ラインの第Ya画素が描画されたところであったことを示している。
また、音声フレームから同期サンプル情報が抽出されるタイミングで、CPU40は、ビデオエンコーダ22からVカウンタ22vおよびHカウンタ22hのカウント値を取得する。取得したカウント値とフィールドカウンタ40fのカウント値とが示す位置をB点とする。つまり、音声フレームから同期サンプル情報が抽出された時点では、第Xフィールドの第(Xb+1)ラインの第Yb画素が描画されていたことになる。
A点とB点とが一致する場合に音声と画像とが記録時と同じタイミングで再生されていることになる。したがって、A点とB点との位置の差が音声と画像との同期のずれとなる。図4の例の場合、画像の再生が音声の再生に比べて、(Xb−Xa)ラインと(Yb−Ya)画素分だけ進んでいることになる。なお、図4の例ではA点とB点とは同一の画像フィールド上に存在するが、A点とB点とが異なる画像フィールド上に存在する場合もある。
音声と画像との同期のずれが許容範囲を超える場合はずれの修正を行う。つまり、画像が音声よりも進んでいる場合には画像を1フレーム時間分(1/30秒)だけ停止させ、画像が音声よりも遅れている場合には画像を1フレーム分だけスキップさせる。
画像を停止させる場合には、CPU40は、1/30秒おきに発生させるMPEG−4コーデック34への画像伸長命令を1回中止する。MPEG−4コーデック34によって伸長された画像データはバッファ34aに格納され、バッファ34aに格納された画像データは1/30秒おきにメモリ制御回路32を通してSDRAM30のバンクAもしくはバンクBに書き込まれる。CPU40が画像伸長命令の発生を1回中止すると、バッファ34aに蓄積されている伸長された画像データは更新されない。したがって、SDRAM30のバンクAもしくはバンクBには前回と同じ画像データが書き込まれる。つまり、バンクAとバンクBには同じ画像データが書き込まれた状態となる。
このため、ビデオエンコーダ22は、バンクは異なるものの2回続けて同じ画像データを読み出して再生することになる。したがって、LCD24には前回と同じ画像が表示され、見かけ上画像が1フレーム時間分停止されることになる。
一方、画像をスキップさせる場合には、CPU40は、通常1/30秒に1回発生させるMPEG−4コーデック34への画像伸長命令を1/30秒の間に2回発生させる。すると、1/30秒に1回読み出されてSDRAM30のバンクに書き込まれるバッファ34aの内容が、読み出される前に次の伸長画像データによって上書きされる。このためSDRAM30のバンクAもしくはバンクBにはバッファ34aに上書きされた画像データが書き込まれる。そして、この上書きされた画像データがビデオエンコーダ22によって読み出されて再生される。したがって、連続した画像フレームがMPEG−4コーデック34によって伸長されるが、LCD24には1フレーム分スキップされて画像が表示される。このようにして音声と画像とのずれが修正され、同期が保たれる。
以下に、図5から図10に示すフロー図を用いて、画像圧縮タスク,音声取込タスク,音声圧縮タスク,音声再生タスクおよび画像再生タスクにおけるCPU40の動作について説明する。なお、画像圧縮タスク,音声取込タスクおよび音声圧縮タスクは同時に平行して実行され、音声再生タスクおよび画像再生タスクは同時に平行して実行される。また、CPU40はフラッシュメモリ44に格納されているプログラムにしたがって動作する。
画像圧縮タスクにおけるCPU40の動作は図5のフロー図に示される。まず、CPU40は、ステップS1において、オペレータによって記録開始操作が行われたかどうかを判断する。ステップS1においてYESと判断すると、次にステップS3において、記録開始操作から1/30秒が経過するまで待機する。この1/30秒の待機は、1フレーム分の画像データが信号処理回路16を経てメモリ制御回路32によってSDRAM30に書き込まれるのを待つためのものである。
ステップS3においてYESと判断すると、ステップS5では、MPEG−4コーデック34に対して画像圧縮命令を与える。すると、MPEG−4コーデック34はメモリ制御回路32を通してSDRAM30から1フレーム分の画像データを読み出してMPEG−4圧縮を施す。そして、圧縮画像データは再びメモリ制御回路32を通してSDRAM30に書き込まれる。SDRAM30に書き込まれた圧縮画像データは別のタスクによって順次メモリカード38に書き込まれる。
ステップS5において画像の圧縮命令をMPEG−4コーデック34に対して与えると、ステップS7では、圧縮命令の発生から1/30秒が経過したかどうかを判断する。ステップS7においてYESと判断すると、ステップS5に戻って再びMPEG−4コーデック34に対して画像の圧縮命令を与える。
ステップS7においてNOと判断すると、ステップS9においてオペレータによって記録停止の操作が行われたかどうかを判断する。ステップS7においてNOと判断するとステップS7に戻り、YESと判断すると画像圧縮タスクを終了する。
音声取込タスクにおけるCPU40の動作は図6のフロー図に示される。まず、CPU40は、ステップS11において、オペレータによって記録開始操作が行われたかどうかを判断する。記録開始操作が行われると、マイクロフォン18から入力された音声が信号処理回路20によって音声データに変換され、この音声データがメモリ制御回路32を通してSDRAM30に書き込まれる。ステップS13では、SDRAM30における音声データの書き込み開始位置(アドレス)を取得してレジスタW1に格納する。なお、レジスタW1に格納されている値を“W1”で表現する。
ステップS15では、第1同期サンプル処理を行う。第1同期サンプル処理では、1番目の1024サンプル(第1フレーム)に対応する同期サンプル情報を取得し、取得した同期サンプル情報を当該1024サンプルの音声データに対応させてRAM46のテーブル46tに記録する。つまり、音声データのSDRAM30への書き込みが開始された時点で、ビデオエンコーダ22からVカウンタ22vおよびHカウンタ22hの値を取得し、CPU40がカウントしている画像フィールド番号の値をフィールドカウンタ40fから取得する。
ステップS17では、SDRAM30における音声データの現状での書き込み終了位置(アドレス)を取得してレジスタW2に格納する。なお、レジスタW2に格納されている値を“W2”で表現する。
ステップS19では、レジスタW1に格納されている値とレジスタW2に格納されている値とから、SDRAM30に書き込まれた音声データのデータ量を算出する。そして、ステップS21では、SDRAM30に書き込まれた音声データの量が1024サンプル分となったかどうかを判断する。
ステップS21においてNOと判断すると、ステップS17に戻って再び書き込み終了位置を取得する。一方、ステップS21においてYESと判断すると、ステップS23において第1同期サンプル処理を行う。この第1同期サンプル処理では、上述したように、次にSDRAM30に書き込まれる1024サンプル分の音声データに対応する同期サンプル情報を取得して、RAM46に形成されたテーブル46tに記録する。
ステップS25では、次の1024サンプル分の音声データを算出するために、書き込み開始位置(W1)を現状における書き込み終了アドレスの次のアドレス(W2+1)で更新する。そして、ステップS27では、オペレータがシャッタボタン42stを操作して記録終了操作を行ったかどうかを判断する。ステップS27においてNOと判断するとステップS17に戻る。ステップS27でYESと判断すると音声取込タスクを終了する。
音声圧縮タスクにおけるCPU40の動作は図7のフロー図に示される。まず、CPU40は、オペレータが記録開始の操作を行うと、その旨がステップS31において判断される。ステップS33では、記録開始の操作から1024サンプル期間(21ミリ秒)が経過するまで待機する。この待機は、マイクロフォン18から入力された1024サンプル分の音声が信号処理回路20およびメモリ制御回路32を通してSDRAM30に書き込まれるのを待つために行われる。
ステップS33においてYESと判断すると、CPU40は、ステップS35において音声データの圧縮命令をMPEG−4コーデック34に対して与える。これによって、1フレーム、つまり、1024サンプル分の音声データがMPEG−4コーデック34に取り込まれMPEG−4圧縮が施される。圧縮された音声データはメモリ制御回路32を通して再びSDRAM30に書き込まれる。
音声データの圧縮命令の発行を行うと、ステップS37において、RAM46に形成されたテーブル46tを参照して当該1024サンプルの音声データに対応する同期サンプル情報を取得する。そして、ステップS39において、取得した同期サンプル情報を音声データに付加する。これによって1音声フレームがSDRAM30上に形成される。こうして形成された音声フレームは、別のタスクによって適宜SDRAM30から読み出されてI/F36を通してメモリカード38に書き込まれる。
ステップS41では、ステップS35における音声の圧縮命令の発生から1024サンプル期間(21ミリ秒)が経過したかどうかを判断する。ステップS41においてYESと判断すると、ステップS35に戻って再びMPEG−4コーデック34に音声の圧縮命令を与える。ステップS41においてNOと判断すると、ステップS43において、オペレータがシャッタボタン42stを操作して記録終了操作を行ったかどうかを判断する。ステップS43においてNOと判断するとステップS41に戻る。ステップS43でYESと判断すると音声圧縮タスクを終了する。
以上に説明した画像圧縮タスク,音声取込タスクおよび音声圧縮タスクによって、メモリカード38に音声データと画像データとを含むMPEGファイルが形成される。次に、音声再生タスクおよび画像再生タスクについて説明する。
音声再生タスクにおけるCPU40の動作は図9のフロー図に示される。まず、ステップS51において音声停止フラグがオン状態であるかどうかを判断し、オン状態である場合には音声停止フラグがオフ状態になるまで待機する。音声停止フラグがオフ状態になると、ステップS53において位置特定フラグがオン状態であるかどうかを判断する。
音声停止フラグおよび位置特定フラグは、後述する画像再生タスクにおいてオン状態に設定される。画像再生タスクにおいて、画像のコマ送り再生やスキップ再生を行っているときには、音声の再生は行わない。そこで、コマ送り再生やスキップ再生を行っている間は、音声停止フラグをオン状態にして音声の再生を停止する。また、画像を第1フレームから再生するときには音声も第1音声フレームから再生すればよいが、画像のコマ送り再生やスキップ再生を行った後に、途中の画像から再生する場合には、再生される画像フレームに対応した音声フレームを特定し、特定された音声フレームから再生しなければならない。そのため、画像のコマ送り再生やスキップ再生を行ったときに位置特定フラグをオン状態に設定して再生する音声フレームの特定が必要なことを画像再生タスクに知らせる。
ステップS53でYESと判断すると、ステップS55で、画像再生タスクにおいてCPU40がレジスタFpを用いてカウントしている再生画像フレームの番号Fpを参照して第Fp番目の画像フレームに対応する音声フレームを特定する。なお、レジスタFpに格納されている値を“Fp”で表す。音声フレームは、画像フレームの番号ではなく、画像フィールドの番号を保持しているので、(Fp×2−1)番のフィールド番号を保持している音声フレームを第Fp画像フレームに対応する音声フレームとして特定する。そして、ステップS57では、音声フレームの特定を終えたので位置特定フラグをオフ状態に設定する。
ステップS59では、ステップS55において特定された音声フレームの伸長命令をMPEG−4コーデック34に与える。ステップS53でNOと判断された場合には、第1音声フレームから伸長される。
ステップS61では、伸長命令の対象となった音声フレームから、同期サンプル情報(画像フィールド番号情報,垂直ライン位置情報および水平画素位置情報)を取得して、RAM46に記録する。そして、ステップS63では、同期サンプリング情報の取得を画像再生タスクに知らせるために同期サンプル情報取得フラグをオン状態に設定する。
ステップS65では、ステップS59で音声フレームの伸長命令を発してから1音声フレームの再生にかかる時間である21ミリ秒が経過したかどうかを判断する。ステップS65においてYESと判断するとステップS51に戻る。一方、ステップS65においてNOと判断するとステップS67に進む。
ステップS67では、オペレータによって再生終了操作が行われるか、もしくは、すべてのデータ(音声フレームおよび画像フレーム)の再生が終了したかどうかを判断する。ステップS67でNOと判断したときにはステップS65に戻り、YESと判断したときには音声再生タスクを終了する。
画像再生タスクにおけるCPU40の動作は図9および図10のフロー図に示される。まず、図9のステップS71では、再生される画像フレームをカウントするためにレジスタFpに1を格納して初期化する。ステップS73では、オペレータによってコマ送り再生もしくはスキップ再生の操作が行われたかどうかを判断する。ステップS73においてYESと判断すると、ステップS87においてコマ送り再生もしくはスキップ再生が行われている旨を音声再生タスクに知らせるために音声停止フラグをオン状態に設定する。また、ステップS89では、コマ送り再生もしくはスキップ再生によって画像が途中から再生されるので再生を開始する音声フレームを特定する必要がある旨を音声再生タスクに知らせるために位置特定フラグをオン状態に設定する。
ステップS91ではコマ送り再生もしくはスキップ再生の処理を行う。コマ送り再生およびスキップ再生の処理の詳細な説明は省略する。コマ送り再生およびスキップ再生の処理では、コマ送り再生もしくはスキップ再生に応じた画像フレームの伸長命令を発行するとともに、画像フレームカウンタFpの更新が行われる。
ステップS73においてNOと判断すると、ステップS75において音声停止フラグをオフ状態に設定する。これによって、音声再生タスクにおいて、音声フレームの再生が開始される。
次に、ステップS77では同期サンプル情報取得フラグがオン状態であるかどうか、つまり、音声再生タスクにおいて音声フレームから同期サンプル情報が取得され、画像と音声とのずれを確認するタイミングが到来したかどうかを判断する。
ステップS77においてNOと判断すると、ステップS93において前回画像フレームの伸長命令が発生されてから1/30秒が経過したかどうかを判断する。画像フレームは1/30秒ごとに再生されるため、1/30秒が経過していなければステップS73に戻る。
ステップS93においてYESと判断すると、ステップS95において、第Fp画像フレームの伸長命令をMPEG−4エンコーダ34に対して発生する。これによって、第Fp画像フレームが伸長されて再生される。そして、ステップS97において、カウンタFpに格納されている値を1だけインクリメントする。
一方、ステップS77においてYESと判断すると、画像と音声とのずれの確認および修正を行う。まず、ステップS79では、同期サンプル情報取得フラグをオフ状態に設定する。
ステップS81では、第2同期サンプル処理を行う。この第2同期サンプル処理では、ビデオエンコーダ22からVカウンタ22vおよびHカウンタ22hの値を取得してRAM46に記録するとともに、CPU40がカウントしている画像フィールド番号の値をフィールドカウンタ40fから取得してRAM46に記録する。
そして、ステップS83では、先の音声再生タスクのステップS61(図8)において音声フレームから取り出されてRAM46に記録された、フィールド番号情報が示す値,垂直ライン位置情報が示す値および水平画素位置情報が示す値と、この画像再生タスクのステップS81における第2同期サンプル処理において取得されてRAM46に記録された、フィールドカウンタ40fの値,Vカウンタ22vの値およびHカウンタ22hの値とから、音声と画像との再生タイミングが何フィールド,何ラインそして何画素分ずれているかを計算する。
ステップS85では、音声と画像とタイミングのずれが許容範囲内であるかどうかを判断する。ステップS85でYESと判断すると前述のステップS93に進んで前回の画像フレームの伸長から1/30秒が経過したかどうかを判断し、判断結果がYESであればステップS95においてMPEG−4コーデック34に対する画像フレームの伸長命令を発生する。
一方、ステップS85においてNOと判断すると、図10のステップS101において、音声と画像とのずれは画像の遅れによるものであるかどうかを判断する。ステップS101においてYESと判断すると、画像の遅れを取り戻すために画像のスキップ処理を行う。つまり、ステップS103において、前回の画像フレームの伸長命令の発生から1/30秒の経過を待たずに第Fp画像フレームの伸長命令をMPEG−4コーデック34に対して発生する。そして、ステップS105では、レジスタFpに格納されている値を1だけインクリメントして図9のステップS73に戻る。
MPEG−4コーデック34によって伸長されてバッファ34aに蓄積された伸長画像データは、1/30秒ごとに読み出されてメモリ制御回路32を通してSDRAM30のバンク(バンクAもしくはバンクB)に書き込まれる。そして、バンクに書き込まれた伸長画像データがビデオエンコーダ22によって読み出されて再生される。
しかし、ステップS103では、1/30秒を待たずに画像の伸長命令がMPEG−4コーデック34に与えられるので、バッファ34aの内容は1/30秒の間に2回更新される。そのため、SDRAM30のバンクには1フレーム分とんで伸長画像データが書き込まれる。そして、ビデオエンコーダ22はそのまま伸長画像データを読み出すので、LCD24に表示される画像は1フレーム分スキップされる。このようにして、画像を音声に追いつかせる。
一方、ステップS101においてNOと判断すると、画像の先行を修正するために画像の表示を1フレーム分停止させる。つまり、ステップS107において、1/15秒(1/30秒の2回分)待機し、ステップS103に進む。
MPEG−4エンコーダ34のバッファ34aの内容は1/30秒ごとに読み出されてSDRAM30のバンクに書き込まれる。しかし、MPEG−4エンコーダ34に画像の伸長命令が与えられないまま1/30秒が経過するので、1/30秒経ってもバッファ34aの内容は更新されない。そのため、SDRAM30のバンクには前回と同じ伸長画像データがバッファ34aから読み出されて書き込まれ、バンクAとバンクBとの内容が同じになる。したがって、ビデオエンコーダ22は、バンクは異なるが前回と同じ伸長画像データをSDRAM30から読み出して再生するので、LCD24に表示される画像は見かけ上停止することになる。画像が停止している間にも音声は再生されるので、音声が画像に追いつく。
以上に説明したように、この実施例のビデオカメラ10においては、画像と音声とを記録するときに音声フレームに対応する画像のフィールド番号,垂直ライン位置および水平画素位置の各情報を音声フレームに付加する。そして、再生するときには、再生される音声フレームから取り出した画像フィールド番号情報,垂直ライン位置情報および水平画素位置情報と、現在再生されている画像のフィールド番号,垂直ライン位置および水平画素位置とから音声と画像との同期のずれを算出する。そして、このずれが許容範囲を超えるときには、画像を一時停止するかもしくは画像をスキップすることによってずれを修正する。したがって、従来とは異なりタイムスタンプ用の時計回路を必要とせず、簡単な回路構成によって音声と画像との同期を実現することができる。