以下に、本発明の好ましい実施の形態を、添付の図面に基づいて詳細に説明する。図1は、本発明の実施形態にかかわる撮像装置500の構成の一例を示すブロック図である。
撮像装置500は、二つの処理回路100(第1の処理回路)と処理回路200(第2の処理回路)を備えている。本実施形態では、これら二つの処理回路100、200はそれぞれが一つのマイクロコンピュータ(マイコン)により構成される。また、本実施形態では、処理回路100、200はそれぞれ、一つの集積回路(LSI)として構成される。
また、二つの処理回路100と処理回路200の間で通信を行うための専用バス300を有している。処理回路100、200はそれぞれ独立に撮像部400から動画データを取得することが可能である。処理回路100、200はそれぞれ、撮像部400から取得した動画データを処理することが可能である。
次に、処理回路100と200の構成について説明する。
処理回路100は、画像処理部101、第1のCPU(Central Processing Unit)102、メモリ103、クロック制御部104、コーデック部105、リサイズ部106、通信部107、バス108を有する。本実施形態では、メモリ103としてSDRAMを使用する。また、メモリ103は処理回路100に内蔵されているが、処理回路100の外部にメモリ103を設けることも可能である。
CPU102は、メモリ103に格納されているコンピュータプログラム(ソフトウエア)に従って、カメラ500全体の動作を制御する。メモリ103は、CPU102のワークエリアとして機能する。なお、CPU102のワークエリアは、メモリ103に限られるものではなく、ハードディスクドライブ等の外部記録装置等であってもよい。画像処理部101は、撮像部400から取得した動画データに対して画素補間処理や色変換処理等の画像処理を行う。画像処理部101は、撮像部400から取得したRGB色空間の動画データをYUV色空間のデータフォーマットに変換する。
撮像部400及び画像処理部101は、CPU102によって、オートフォーカス(AF)処理及び自動露出制御(AE)処理を行うように制御される。CPU102からAF処理及びAE処理を開始するように指示された場合、画像処理部101は、撮像部400から取得した動画データを用いて演算処理を行う。撮像部400及び画像処理部101は、この演算結果に基づいて、TTL(スルー・ザ・レンズ)方式のAF処理及びAE処理を行う。
CPU102から動画の撮影を開始するように指示された場合、撮像部400及び画像処理部101は露光処理や現像処理等の処理を含む撮影処理を実行する。撮像部400は、CCDやCMOS等の撮像素子やAD変換器等を備える。撮像部400は、撮像素子により得られたアナログ信号をデジタルデータに変換して出力する。撮像部400から取得された動画データは、YUV形式の映像データとしてメモリ102に記憶される。メモリ103に記憶された動画データに対して、コーデック部105(第1の符号化部、第1の復号部)により符号化処理が行われ、動画データのデータ量が圧縮される。
コーデック部105は、撮影時においては、撮像部400より取得した動画データをH.264(MPEG4 AVC)等の公知の符号化方式により符号化する。また、コーデック部105は、再生時においては、後述の様に、記録媒体212から読み出された動画データを復号する。クロック制御部104は処理回路100における処理タイミングを制御するための各種の動作クロックを生成する。クロック制御部104からのタイミング信号により、動画撮影の際に撮像部400から動画データを取得するタイミングなどが制御される。
リサイズ部106(第1のリサイズ部)は、撮影時においては、撮像部400より取得した動画データの各フレームの画素数(サイズ)を必要な画像サイズに変更する。通信部107(第1の通信部)は、処理回路200との間で動画データやその他必要なコマンドを送受信する。通信部107は、動画データを受信するためのデータ受信部107a、動画データを送信するためのデータ送信部107b、制御コマンドなどのメッセージを送るためのメッセージ通信部107cを有する。通信部107での通信は専用のバス300を介して行われる。それぞれの通信は独立して行うことが可能である。
本実施形態においては、後述の様に、撮影時において処理回路100により処理された動画データと、再生時において処理回路100により処理された動画データが通信部107により処理回路200に送信される。
処理回路200は、画像処理部201、第2のCPU202、メモリ203、クロック制御部204、コーデック部205、リサイズ部206、通信部207、表示部208、音声制御部209、記録部再生部210、操作部211、バス213を有する。本実施形態では、メモリ203としてSDRAMを使用する。また、メモリ203は処理回路100に内蔵されているが、処理回路200の外部にメモリ203を設けることも可能である。画像処理部201、第2のCPU202、メモリ203、クロック制御部204、コーデック部205、リサイズ部206、通信部207(第2の通信部)の各ブロックは処理回路100における各ブロックと同様の機能を持つ。
処理回路200は、撮影時には、撮像部400から動画データを取得して、コーデック部205(第2の符号化部、第2の復号部)により符号化処理を行う。記録再生部210は、記録時においては、コーデック部205により符号化された動画データと、処理回路100から送信された動画データ、及び、音声処理部209で生成された音声データを記録媒体212に記録する。記録媒体212は、メモリカードなどのランダムアクセス媒体である。また、本実施形態では、不図示の装着、排出機構により、容易に装着、排出が可能となっている。また、記録媒体212を撮像装置500に内蔵する構成としてもよい。
CPU202は、操作部211により指定された動画のフレームレートや音声有無のユーザの設定に従って動画データや音声データの記録を制御する。
また、記録再生部210は、再生時においては、後述の様にユーザによって選択されたシーンの動画データと音声データを記録媒体212から読み出す。コーデック部205は、再生時においては、記録媒体212から読み出された動画データと音声データを復号する。
リサイズ部206(第2のリサイズ部)は、撮影時においては、撮像部400から取得した動画データの画像サイズを表示部208のサイズに合わせて変更してメモリ203に記憶する。そして、リサイズされたデータが表示部208に供給されて表示される。また、再生時においては、リサイズ部206は、再生された動画データのサイズを表示部208のサイズに合わせて変更してメモリ203に記憶する。そして、リサイズされたデータが表示部208に供給されて表示される。
また、再生された音声データは、音声制御部209に供給されて出力される。表示部208は、液晶ディスプレイなどの表示器により構成される。表示部208は、撮影された動画や再生された動画の他、各種の必要な情報を表示する。CPU202は、表示部208に表示する情報を生成して表示部208に送る。
操作部211は、撮像装置500を操作するためのユーザインターフェースとして機能する。操作部211は、撮像装置500を操作するための電源ボタン、モード変更ボタン、シャッターボタン、十字ボタン、メニューボタン等を有し、各ボタンはスイッチ、タッチパネル等により構成される。CPU202は、操作部211を介して入力されたユーザの指示に従って撮像装置500を制御する。ユーザによって操作部211のボタンが操作された場合、操作部211から各ボタンに応じた操作信号がCPU202に入力される。CPU202は操作部211から入力された操作信号を解析し、解析結果に応じて操作信号に対応した処理を判定する。CPU202は、操作部211から入力された操作信号に対応した処理を実行するように撮像装置500の各部を制御する。
次に、撮像装置500において記録する動画データの形式について説明する。本実施形態では、撮影した動画、音声データを動画ファイルとして記録媒体212に記録する。本実施形態では、汎用のファイル形式であるMOV形式に従い動画ファイルを記録する。
図2にMOVファイルの構成を示す。MOVファイルは、図2の220に示すように、符号化された動画データと音声データからなるストリームデータが格納されるmdatアトム222と、ストリームデータに関連する管理情報が格納されるmoovアトム221とから構成されている。mdatアトム222は更に、225に示すように複数のチャンク(chunk cN)で構成される。各チャンクは226に示すように複数のサンプル(sample sN)から構成される。各サンプルは例えば、それぞれが符号化された動画データの各フレームに対応する。
moovアトム221は図2(c)に示すように、作成日時等が記録されるヘッダ情報であるmvhdアトム223と管理情報が格納されるtrakアトム224を有する。trakアトム224には、各サンプルのサイズの情報を格納するstszアトム228が格納される。また、trakアトム224には、各チャンク内のサンプル数の情報を格納するstscアトム229が格納される。また、trakアトム224には、mdatアトム222の各チャンクへのファイル先頭からのオフセット値(バイト数)の情報を格納するstcoアトム230が格納される。
stszアトム228、stscアトム229、stcoアトム230に格納されるデータのデータ量は、記録された動画、音声データの量、すなわち記録時間と伴に増大していく。例えば1秒間30フレームの画像を15フレーム毎1チャンクに格納した場合、2時間で1メガバイトほどのデータとなる。また、moovアトム221に格納される管理情報の内容は記録が終了するまでは確定されない。また、moovアトム221のサイズは記録時間に応じて増加するため、記録が終了するまではmoovアトム221のサイズが確定されない。そのため、mdatアトム222をファイル先頭に配置し、記録終了時にmoovアトム221をmdatアトム222の後ろに配置する。
なお、MOV形式の動画ファイルを再生する場合には、先にmoovアトム221を読み出し、moovアトム221に格納された管理情報より各チャンクへのアクセスが可能となる。そのため、moovアトム221をmdatアトム222の後ろに配置するよりも、ファイルの先頭にmoovアトム221を配置することで、moovアトム221へのアクセスが容易になるような構造で記録することが望ましい。
次に、撮像装置500における記録時の処理について説明する。
まず、各処理回路100、200が処理するフレームについて説明する。前述の様に、本実施形態では、動画データをH.264方式に従い符号化する。H.264では、フレーム内予測符号化、前方予測フレーム間予測符号化、及び、双方向予測フレーム間予測符号化の三つの符号化方式を用いる。ここで、フレーム内予測符号化により符号化するフレームをIフレーム、前方予測フレーム間予測符号化により符号化するフレームをPフレーム、双方向予測フレーム間予測符号化により符号化するフレームをBフレームと呼ぶ。
本実施形態においては、処理回路100、200がそれぞれ符号化した二系統の動画データは、一系統の動画データとして記録媒体212記録される。そこで、本実施形態では、各処理回路100、200は、動画データの各フレームをフレーム内予測符号化により符号化する。これにより、符号化の際に、参照フレームの情報を処理回路100と200の間で送受信しなくて済む。ただし、フレーム内予測だけでなく、フレーム間予測符号化を用いることも可能である。その場合、フレーム間予測のための参照フレームの情報を、処理回路100と200の間で送受信することが必要となる。
図12の1201は処理回路200が生成する動画データ、1202は処理回路100が生成する動画データ、1203は記録媒体212に記録される動画データを表している。この様に、処理回路100、200は、撮像部400により生成される動画データを1フレームおきに交互に取得して符号化処理を行う。即ち、処理回路200は、処理回路100が処理するフレームとは異なるフレームの動画データを処理する。そのため、各処理回路100、200がそれぞれ処理可能な動画データのフレームレートの倍のフレームレートの動画を記録することができる。
また、処理回路200では、動画データの各フレームをIDR(Instantaneous Decoding Refresh)−Iフレームとして符号化する。H.264符号化では、Iフレームを飛び越してフレーム間予測符号化を行うことが可能である。一方、IDR−Iのフレームを飛び越したフレーム間予測は禁止される。一方、処理回路100では、記録開始の指示の後の先頭フレームをIDR−Iフレームとして符号化し、2フレーム目以降のフレームは通常のIフレームとして符号化する。IDR−Iフレームには、それぞれ、idr_pic_idと呼ばれるIDを付加する必要がある。また、H.264では、隣接するIDR−Iフレームのidr_pic_idに同じ値を付加することができない。例えば、処理回路100と200がそれぞれ、先頭から全てIDR−Iフレームとして符号化を行い、また、idr_pic_idとして同じ値を付加する構成とした場合、これらを一つにまとめた動画データでは、隣接するIDR−Iフレームでidr_pic_idの値が同じになることがある。
また、idr_pic_idのデータはゴロム符号化されており、更に、不定長の長さで記述されている。そのため、処理回路100と200により生成された動画データを結合した後で、idr_pic_idの値を変更することは困難である。そこで、本形態では、処理回路100により生成される動画データについては、2フレーム以降をIフレームとして符号化し、後述の様に、先頭のIDR−Iフレームを記録しないようにして、idr_pic_idを変更しなくても済むようにしている。
次に、処理回路200による動画データの記録開始時の処理について図3のフローチャートを用いて説明する。図3の処理は処理回路200のCPU202が各部を制御することにより実行される。
操作部211により電源が投入されると、CPU202は撮像装置500を撮影モードに設定する。そして、CPU202は、クロック制御部204によるタイミング信号の生成を開始し、このタイミング信号に従って撮像部400を制御して、撮像部400による動画の撮影動作を開始する。なお、本実施形態では、撮像部400は1フレームが水平3840画素×垂直2160画素で、フレームレートが30フレーム毎秒(fps)の動画データを出力する。CPU202は、クロック制御部204からのタイミング信号に従って撮像部400から動画データを取得して、メモリ203に記憶する。そして、リサイズ部206によりメモリ203に記憶された動画データのサイズを変更して再度メモリ203に記憶する。表示部208は、メモリ203より動画データの各フレームを読み出して表示する。
この様な撮影待機状態において、操作部211から記録開始の指示があると、CPU202は、メッセージ通信部207cを介して記録準備処理のコマンドを処理回路100に通知する(S301)。処理回路マイコン100の処理は図4のフローチャートを用いて後述する。次に、CPU202は、記録準備処理を行う(S302)。具体的には、CPU202は、符号化処理する動画のフレームレート、符号化後の目標データレート、符号化形態(処理回路200では全てIDR−Iフレームとして符号化する)などを設定する。また、CPU202は、符号化された動画データの各フレームを記憶するための記録バッファ領域をメモリ203上に設定する。また、CPU202は、記録準備処理のコマンドと共に、符号化処理する動画のフレームレート、符号化後の目標データレートなどの情報もメッセージ通信部207cにより処理回路100に通知する。
次に、処理回路100から、動画記録開始の準備が完了した旨の通知をメッセージ通信部207cにより受信したら(S303)、CPU202は、処理回路100とのフレーム読み出しの同期処理を行う(S304)。具体的には、CPU202は、メッセージ通信部207cより、処理回路100による動画データの処理タイミングを示す制御コマンドを処理回路100に送信する。これにより、処理回路100と200が、撮像部400により得られる動画データを1フレームおきに交互に処理するように制御される。次に、CPU202は、クロック制御部204のタイミング信号に応じて、撮像部400から動画データを取得し、動画データの符号化処理を開始する(S305)。
次に、処理回路100による動画データの記録開始時の処理について、図4のフローチャートを用いて説明する。図4の処理は処理回路100のCPU102が各部を制御することにより実行される。
前記の様に、メッセージ通信部107cにより、処理回路200から記録開始を通知するコマンドが受信されると(S401)、CPU102は、処理回路100の記録準備処理を行う(S402)。具体的には、CPU102は、符号化処理する動画のフレームレート、符号化後の目標データレート、符号化形態(処理回路200では、2フレーム目以降が全てIフレームとして符号化される)などを設定する。また、CPU102は、符号化された動画データの各フレームを記憶するための記憶領域をメモリ103上に設定する。
次に、コーデック部105を用いてダミーデータの符号化処理が実行される(S403)。CPU102は、撮像部400より1フレームの動画データを取得し、IDR−Iフレームとして符号化する。ここで符号化されるフレームは、図12の1202における先頭のフレームである。ここで符号化されたフレームはダミーデータであり、実際には記録されないため、処理回路200には送信されず、破棄される。このように先頭フレームを記録せずに破棄することで、記録される動画へのタイムラグが発生してしまう事を回避することが可能である。
次に、CPU102は、メッセージ通信部107cより、記録準備が完了した旨のコマンドを処理回路200に送信する(S404)。その後、メッセージ通信部107cにより同期処理のタイミングを示すコマンドが受信されると、CPU102は、処理回路200とは異なるフレームを処理するように、クロック制御部104による動画データの処理タイミングを変更する(S405)。次に、CPU102は、クロック制御部104からのタイミング信号に従って撮像部400より動画データを取得して符号化処理を開始する(S406)。
この様に、処理回路100と200は、撮像部400により得られる動画データを1フレームおきに交互に取得して符号化処理を行う。
次に、図7を用いて、処理回路100と200のメモリ103、203に記憶されるデータの記憶領域について説明する。
図7の701は、メモリ203に記憶された動画データの様子を示す図である。701において、フレーム1、3は処理回路200により符号化されたデータで、フレーム2、4が処理回路100により符号化されたデータである。処理回路100と処理回路200により符号化されたデータが、メモリ203の記憶領域704−707に隙間なく配置される。
図7の702は、処理回路100から符号化された動画データが送信される前のメモリ203における記憶状態を示す図である。処理回路100により符号化された1フレームの動画データは、一旦メモリ103に記憶された後、メモリ103から読み出されて処理回路200に送信され、メモリ203に記憶される。図7の703は、処理回路100におけるメモリ103に記憶されたデータの状態を示す図である。703では、フレーム2、4、6のデータが記憶領域712−714に記憶されている。
CPU102は、処理回路200におけるメモリ203の書き込みアドレスを指定し、この指定されたアドレスに符号化された動画データを記憶するように、処理回路200に対して符号化されたデータを送信する。CPU202は、処理回路100より符号化された動画データを受信すると、受信したデータを直接メモリ103に送る。そして、CPU202は、CPU102により指定されたメモリ203のアドレスに受信したデータを書き込む。CPU102が指定する書き込みアドレスの情報は、CPU202がメッセージ通信部207cを制御して処理回路100に通知する。
また、CPU102は、符号化されたデータを処理回路200に送信する前に、符号化された1フレームの動画データのデータ量の情報をメッセージ通信部107cによりCPU202に知らせる。例えば、CPU102は、703に示す様に、各フレームの動画データの符号化が完了すると、各フレームのデータ量を示す情報をメッセージ通信部107cにより処理回路200に知らせる。
フレーム2のデータ量の情報が処理回路100より送信されると、CPU202は、フレーム1の記憶領域708に連続するように、このデータ量の分だけメモリ203の記憶領域709を予約しておく。そして、CPU202は、コーデック部202により符号化されたフレーム3のデータを、この予約した記憶領域に連続した領域710に記憶する。この様にフレーム2の記憶領域を予約した後、処理回路100よりフレーム2の動画データが送信された場合、CPU202は、受信したフレーム2の動画データをメモリ203の領域709に記憶する。この様に、処理回路100より符号化された各フレームの動画データのサイズの情報を、動画データの送信を開始する前に処理回路200に送信することで、CPU202は、次に符号化する動画データの記憶領域を決定する。
次に、各処理回路における符号化処理について説明する。図5は処理回路200における符号化処理を示すフローチャートである。図5の処理はCPU202が各部を制御することにより実行される。
CPU202は、タイミング制御部204からのタイミング信号に基づき、撮像部400から動画データを取得するタイミングであるか否か判別する(S501)。処理タイミングでない場合はステップS507に進む。
動画データの処理タイミングであった場合、CPU202は、撮像部400から1フレームの動画データを取得し、画像処理部201にてYUV色空間データに変換した後メモリ203に記憶する(S502)。次に、CPU202は、取得した1フレームの動画データを符号化した後でメモリ203に記憶するための記憶アドレス(記憶領域)を決定する(S503)。符号化されたデータを記憶する領域は、図3のS302にてメモリ203内に確保された領域である。メモリ203における各フレームの記憶状態は図7に示した通りである。
次に、CPU202は、コーデック部205により、メモリ203に記憶された動画データを符号化し、S503で決定したメモリ203のアドレスに記憶する(S505)。CPU202は、メモリ203に関する情報をメッセージ通信部207cにより処理回路100に通知する。ここで通知されるメモリに関する情報は、処理回路100が符号化データを記憶するためのメモリ203の記憶アドレス、及び、メモリ203における記録バッファ領域の空き容量である。CPU102は、符号化データを処理回路200に送信する際には、ここで送信されたアドレスを指定する。
また、処理回路100から、符号化されたデータのデータ量の情報が受信されると(S506)、CPU202は、記録バッファ領域における符号化データの記憶領域を設定する。前述の様に、処理回路100より符号化データのデータ量の情報が通知されたことにより、処理回路200が次に符号化するフレームを記録バッファ領域に記憶する際のアドレスを決定することが可能となる。
次に、CPU202は、処理回路100から符号化データが送信されているか否かを判別し(S507)、符号化データが送信されていた場合、データ受信部207aにて符号化データを受信する(S508)。なお、処理回路100は、符号化データを周期的に送信する必要はなく、任意のタイミングで処理回路200に送信する。処理回路200では、処理回路100からの1フレームの符号化データの送信が完了する前にデータ量の情報を取得できる。そのため、処理回路200は、処理回路100からの符号化データの受信を待たずに、マイコンS200における次フレームの処理を実行可能としている。これにより、処理回路200における処理負担を軽減することを実現している。CPU202は、記録停止の指示があったか否かを判別し(S509)、記録停止の指示があった場合、処理を終了する。
図6は処理回路100における符号化処理を示すフローチャートである。図6の処理はCPU102が各部を制御することにより実行される。
CPU102は、タイミング制御部104からのタイミング信号に基づき、撮像部400から動画データを取得するタイミングであるか否か判別する(S601)。処理タイミングでない場合はステップS607に進む。
動画データの処理タイミングであった場合、CPU102は、撮像部400から1フレームの動画データを取得し、画像処理部101にてYUV色空間データに変換した後メモリ103に記憶する(S602)。次に、CPU102は、取得した1フレームの動画データを符号化した後でメモリ103に記憶するための記憶アドレス(記憶領域)を決定する(S503)。符号化されたデータを記憶する領域は、図4のS402にてメモリ103内に確保された領域である。メモリ103における各フレームの記憶状態は図7に示した通りである。
次に、CPU102は、コーデック部105により、メモリ103に記憶された動画データを符号化し、S603で決定したメモリ203のアドレスに記憶する(S604)。次に、メッセージ通信部107cにより、処理回路200からのメモリの情報を受信する(S605)。メモリ103の情報が処理回路200から通知されると、処理回路100から符号化データを処理回路200に送信することが可能となる。
次に、CPU102は、符号化された1フレームの動画データのサイズの情報をメッセージ通信部107cにより処理回路200に送信する。なお、処理回路200に対する符号化データのデータ量の情報の送信タイミングと、符号化データの送信タイミングは、CPU102の制御により不定期に実行される。
次に、CPU102は、処理回路200から、メモリ203の情報が受信されているか否かを判別する(S607)。メモリ203の情報が受信されていた場合、CPU102は、未送信の符号化データがメモリ103に記憶されているか否かを判別する(S608)。未送信の符号化データがあった場合、CPU102は、S603で通知された書き込みアドレスを指定し、メモリ103より未送信の1フレームの符号化データを読み出し、データ送信部207bにより処理回路200に送信する(S609)。
符号化データの送信が完了すると、CPU102は、処理回路200より記録停止の指示を受けたか否かを判別し(S610)、記録停止の指示があると処理を終了する。また、S607にてメモリ103の書き込みアドレスの情報が受信されていない場合、或いは、未送信の符号化データがメモリ103に記憶されていない場合にも、S610に進む。
次に、記録停止時の処理について説明する。図8は、記録停止時における処理回路200の処理を示すフローチャートである。図8の処理はCPU202が各部を制御することにより実現される。
操作部材211より記録停止の指示があった場合、CPU202は、メッセージ通信207cにより、処理回路100に対して記録停止を通知する(S801)。次に、CPU202は、コーデック部205の符号化処理を停止し(S802)、処理回路100から全ての符号化データを受信したか否かを判別する(S803)。処理回路100から全ての符号化データの受信が完了していない場合、CPU202は、処理回路100から符号化データを受信し(S804)、受信したデータをメモリ203の記録バッファ領域に記憶する(S805)。そして、CPU202は、全ての符号化データが処理回路100より送信された場合、処理を終了する。
図9は、記録停止時における処理回路100の処理を示すフローチャートである。図9の処理はCPU102が各部を制御することにより実現される。
メッセージ通信部107cにより処理回路200から記録停止のコマンドを受信するとフローが開始され、CPU102は、コーデック部105の符号化処理を停止する(S901)。次に、CPU102は、未送信の符号化データがメモリ103に記憶されているか否かを判別し(S902)、未転送データがある場合はデータ送信部107bにより処理回路200に符号化データを送信する(S904)。そして、全ての符号化データの送信が完了すると、CPU102は、メッセージ通信部107cにより、全ての符号化データの送信が完了した旨を処理回路200に通知する(S903)。
次に、処理回路200による動画ファイルの記録処理について説明する。図10は動画ファイルの記録処理を示すフローチャートである。図10の処理はCPU202が各部を制御することにより実行される。
操作部211より記録開始の指示があると、CPU202は、記録再生部210を制御して、記録媒体212上に新たな動画ファイルをオープンする(S1001)。次に、CPU202は、メモリ203の記録バッファ領域に、未記録の動画、音声データが所定量記憶されているか否かを判別する(S1002)。また、本実施形態では、CPU202は、記録開始からの各フレームの経過時間を示すタイムコードの情報を生成し、メモリ203の記録バッファ領域に記憶する。所定量の未記録データが記録バッファ領域に記憶されていた場合、CPU202は、記録再生部212を制御し、メモリ203より未記録の動画、音声及びタイムコードのデータを読み出して記録媒体212に記録する(S1003)。なお、所定量ではなく、所定時間分の未記録データが記録バッファ領域に記憶された場合に記録媒体212への書き込みを行う様にしてもよい。また、本実施形態では、記録媒体212に対するデータの書き込み速度が、符号化された動画データと音声データのデータレートよりも大きいものとする。
所定量の未記録データの書き込みが終了すると、CPU202は、記録媒体212へのデータの書き込みを停止する。そして、CPU202は、操作部211より記録停止の指示があったか否かを判別する(S1004)。記録停止の指示が無い場合には記録処理が継続される。また、記録停止の指示があった場合、CPU202は、メモリ203における記録バッファ領域より未記録データを読み出し、記録再生部210により記録媒体212に記録する(S1005)。また、CPU202は、動画ファイルの記録中に、図2のmoovアトムに格納する管理情報を順次生成してメモリ203に記憶する。そして、CPU202は、メモリ203よりmoovアトムに格納する管理情報を読み出し、記録再生部210により記録媒体212に記録して、動画ファイルをクローズする(S1006)。このような処理により、MOV形式の動画ファイルが記録媒体212に記録される。
次に、図11を用いて各処理回路100、200による動画データの符号化処理のタイミングについて説明する。
図11において、1101は記録される動画データのフレームレートに対応したフレームの周期である。本実施形態では、撮像部400により生成される動画データのフレームレートと記録される動画のフレームレートが共に30fpsなので、フレーム間隔1101は1/30秒である。1102は処理回路200による動画データの各フレームを処理するフレーム間隔である。1103は処理回路100による動画データの各フレームを処理するフレーム間隔である。処理回路100と200は、撮像部400から出力される動画データを1フレームおきに交互に処理するため、フレーム間隔1102、1103はそれぞれ、記録される動画のフレーム間隔の2倍の間隔である。
1104は処理回路200が撮像部400から1フレーム分の動画データを取得する期間、1105は処理回路200が1フレームの動画データを符号化処理する期間である。1106は処理回路100が撮像部400から1フレーム分の動画データを取得する期間、1107は処理回路100が1フレームの動画データを符号化処理する期間である。1108は処理回路100から処理回路200に符号化データを送信する期間である。
また、1109は処理回路200から処理回路100に対するメモリ203の情報を送信する処理を示している。1110は処理回路100から処理回路200に対して符号化データのデータ量の情報を送信する処理を示している。1111は処理回路100から処理回路200に対して1フレームの符号化データの送信が完了したことを通知する処理を示している。
図11に示すように、フレーム間隔1101に対応したフレームレートの動画データを処理回路100と200の何れか一方で処理する場合、フレーム間隔1101の期間内に1フレームの動画データの取得及び符号化処理を完了しなくてはならない。
一方、本実施形態では、二つの処理回路100と200が並列に動画データを符号化処理するため、各処理回路は、フレーム間隔1101の期間内に1フレームの動画データの取得及び符号化処理を完了しなくてもよい。
そして、本実施形態では、処理回路100により1フレームの動画の符号化処理が完了した場合に、符号化データのデータ量の情報を処理回路200に送信する。そのため、処理回路200では、処理回路100から符号化データを受信する前に次のフレームの符号化処理を開始することが可能となる。
次に、再生処理について説明する。
図13は、再生時における処理回路200の処理を示すフローチャートである。図13の処理は、CPU202が各部を制御することにより実現される。操作部211より再生モードへの切り替え指示があった場合、CPU202は、記録再生部210に対し、記録媒体212に記録された各動画ファイルを管理する管理ファイルを読み出すように指示する。そして、CPU202は、読み出された管理ファイルに基づき、記録媒体212に記録された各動画ファイルのインデックス画面を表示部208に表示する。ユーザが操作部211を操作して、表示部208に表示された動画ファイルの一つを選択して再生開始を指示すると、図13の処理が開始される。
CPU202は、ユーザにより選択された動画ファイルのファイル名等の識別情報をメッセージ通信部207cにより処理回路100に通知する(S1301)。次に、CPU202は、記録再生部210を制御して、選択された動画ファイルのmoovアトムのデータを読み出し、メモリ203に記憶する(S1302)。また、処理回路100のCPU102は、S1301にて処理回路200から通知された動画ファイルの情報に基づき、メッセージ通信部107cにより、記録再生部210に対して選択された動画ファイルのmoovアトムの読み出しを要求する。記録再生部210は、CPU102からの読み出し要求に従い、記録媒体212から選択された動画ファイルのmoovアトムを読み出し、データ送信部207aにより処理回路100に送る。CPU102は、データ受信部107aにより選択された動画ファイルのmoovアトムのデータを受信すると、メモリ103に記憶し、moovアトムのデータをメモリ103に記憶すると、再生準備完了を示す情報をメッセージ通信部107cにより処理回路200に送信する。これにより、動画データの再生処理のために必要な情報を、処理回路100と200の間で共に利用できるようになる。なお、CPU102が記録再生部210に対してmoovアトムのデータの読み出しを直接要求するのではなく、CPU202がメモリ203に記憶したmoovアトムのデータを処理回路100に送信するようにしてもよい。
CPU202は、このように処理回路100から再生準備完了の通知を待つ(S1303)。再生準備完了の通知を受けた場合、CPU202は、クロック制御部204を制御して、動画データの復号タイミングを示すデコードクロックと表示部208の表示タイミングを示す表示クロックの出力を開始する(S1304)。デコードクロックは、moovアトムの情報に基づき決定される。また、CPU102は、クロック制御部104を制御して、デコードクロックの出力を開始する。また、表示クロックは、表示部208の能力により決定される。
次に、CPU202は、復号された動画データを用いて表示用画面を生成する処理を実行し(S1305)、生成された表示用画面を表示部208に表示する(S1306)。そして、CPU202は、操作部211より再生停止の指示があったか否かを判別し、再生停止の指示があるまで処理を継続する。
各処理回路100、200は、それぞれデコードクロックに応じたタイミングで動画データの復号処理を実行する。また、後述の様に、処理回路200では、表示クロックに応じたタイミングで再生画像の縮小処理を実行して表示画面を生成する。一方、処理回路100では、表示タイミングとは独立したタイミングで再生画像の縮小処理を実行して表示画面を生成する。
また、後述の様に、本実施形態では、処理回路100と200は1フレームおきに交互に再生された動画データの復号処理を行う。そのため、動画データにおいて、処理回路100が処理するフレームの番号は、S1301において、処理回路200から処理回路100に通知される。
また、S1306の表示処理においては、表示クロックに対応したタイミングで、生成された表示画面を表示部208に表示する。このとき表示するフレームは、処理回路100側で生成したものと、処理回路200側で生成したものがある。どちらの処理回路で生成したフレームを使うかを判定する処理は後述する。
次に、処理回路200による表示画面の生成処理について説明する。図14は処理回路200による表示画面の生成処理を示すフローチャートである。図14の処理はCPU202が各部を制御することにより実行される。
処理回路200は、デコードクロックに応じたタイミングで1フレームの動画データを復号し、また、表示クロックに応じたタイミングで復号された動画データのサイズを縮小し、表示画面を生成する。
まず、CPU202は、デコードクロックによるデコードタイミングであるか否かを判別する(S1401)。デコードタイミングであった場合、CPU202は、記録再生部210に対し、1フレームの動画データの読み出しを要求する。そして、CPU202は、コーデック部205により、読み出された1フレームの動画データを復号し(S1402)、復号された動画データをメモリ203に記憶する(S1403)。
次に、CPU202は、表示クロックによるデコードタイミングであるか否かを判別する(S1404)。表示タイミングであった場合、CPU202は、リサイズ部206を制御して、メモリ203に記憶された復号済みの1フレームの動画データのサイズを縮小し、メモリ203の表示用画面の記憶領域に記憶する(S1406)。CPU202は、図14の処理を繰り返すことで、再生停止の指示があるまでの間、表示用画面を生成する。
次に、処理回路100による表示画面の生成処理について説明する。図15は処理回路100による表示画面の生成処理を示すフローチャートである。図15の処理はCPU102が各部を制御することにより実行される。
処理回路100は、デコードクロックに応じたタイミングで1フレームの動画データを復号し、引き続き復号された動画データの画面サイズの縮小処理を実行する。
まず、CPU102は、デコードクロックによるデコードタイミングであるか否かを判別する(S1501)。デコードタイミングであった場合、CPU102は、記録再生部210に対し、1フレームの動画データの読み出しを要求する。記録再生部210は、記録媒体211より指定された動画データを読み出して、データ送信部207aにより処理回路100に送る。CPU202は、コーデック部205により、送信された1フレームの動画データを復号し(S1502)、復号された動画データをメモリ103に記憶する(S1503)。
1フレームの動画データの復号処理が完了すると、CPU102は、リサイズ部106を制御して、メモリ103に記憶された復号済みの1フレームの動画データのサイズを縮小する。そして、CPU102は、縮小した動画データをデータ送信部107bにより処理回路200に送信し、メモリ203の表示用画面の記憶領域に記憶する(S1505)。CPU102は、図15の処理を繰り返すことで、再生停止の指示があるまでの間、表示用画面を生成する。
このように、処理回路100と処理回路200では、リサイズ処理の手順を異ならせることにより、メモリの効率的な利用と再生速度の維持を両立させる。つまり、処理回路200では、表示部208の表示タイミングにあわせてリサイズ部206にてリサイズ処理を行う。これにより、リサイズ済のフレームを保存しておくためのメモリ203の記憶領域を最小限にとどめ、メモリ203を効率的に利用することができる。また、データバス300を通して動画データを転送する処理回路100では、デコード処理、リサイズ処理、転送処理を連続して行うことで、データバス300の通信のためのオーバーヘッド分を補い、処理回路200に早く復号済みの動画データを送信する。なお、本実施形態では、メモリ203の表示用画面の記憶領域として、3フレーム分の記憶領域を用意している。そして、新たに1フレームのリサイズ処理が完了すると、一番古いフレームのデータを消去して新たなフレームのデータを記憶する。
次に、処理回路200における、復号された動画データの表示処理について説明する。図16は、処理回路200による表示処理を説明するためのフローチャートである。図16の処理はCPU202が各部を制御することにより実行される。また、図16の処理は、表示クロックに応じて実行される。
まず、CPU202は、表示するフレームのフレーム番号を更新する(S1601)。フレーム番号とは、ここでは、動画の先頭から数えて何枚目のフレームかを示す番号である。先頭を1とし、次が2、さらにその次が3といったように、1ずつ増えるものとする。本実施形態では、デコードクロックを用いて表示フレーム番号を更新する。即ち、最後に表示フレーム番号を更新してから、ステップS1601までの間にデコードクロックが発生していれば表示フレーム番号を1増やし、そうでなければ表示フレーム番号は変更しない。
次に、CPU202は、表示フレーム番号と、処理回路200によりリサイズされてメモリ203に記憶されたフレームのフレーム番号を比較する(S1602)。これらのフレーム番号が一致している場合(S1603)、CPU202は、処理回路200によりリサイズ処理されたフレームの動画データをメモリ203より読み出し、表示部208に供給して表示する(S1604)。
一方、表示フレーム番号と、処理回路200によりリサイズ処理されたフレーム番号が一致しない場合(1603)、CPU202は、処理回路200によりリサイズされてメモリ203に記憶されたフレームのフレーム番号を比較する(S1602)。これらのフレーム番号が一致している場合(S1606)、CPU202は、処理回路100によりリサイズ処理されてメモリ203に記憶されたフレームの動画データをメモリ203より読み出し、表示部208に供給して表示する(S1607)。
また、表示フレーム番号と、処理回路100によりリサイズ処理されたフレーム番号が一致しない場合(1606)、CPU202は、メモリ203に記憶されたリサイズ済みのフレームのうち、表示フレーム番号に最も近いフレームを選択する。そして、CPU202は、選択したフレームの動画データをメモリ203より読み出し、表示部208に送って表示する。
図17は、再生時における処理回路100と200による動画データの復号、表示処理を示すタイミングチャートである。図17に示す様に、各処理回路100、200はそれぞれ、デコードクロックに対応したタイミングで1フレームの動画データを復号する。また、処理回路100では、動画データの復号処理に引き続いてリサイズ処理を実行し、リサイズ処理に引き続いて、リサイズされたフレームのデータを処理回路200に送信する。
一方、処理回路200では、動画データの復号処理が完了した後、すぐにリサイズ処理を行うのではなく、次の表示クロックに対応したタイミングでリサイズ処理を実行する。
この様に、本実施形態では、二つの処理回路を使って、画素数とフレームレートが大きい動画データを再生することができる。さらに、二つの処理回路を使って動画データを再生する際、メモリを効率的に利用し、処理回路の間でのデータ転送のためのオーバーヘッドを補うことが可能となる。