JPWO2006006714A1 - 映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置、映像音声同期再生方法、映像音声同期再生プログラム及び映像音声同期再生装置 - Google Patents
映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置、映像音声同期再生方法、映像音声同期再生プログラム及び映像音声同期再生装置 Download PDFInfo
- Publication number
- JPWO2006006714A1 JPWO2006006714A1 JP2006529208A JP2006529208A JPWO2006006714A1 JP WO2006006714 A1 JPWO2006006714 A1 JP WO2006006714A1 JP 2006529208 A JP2006529208 A JP 2006529208A JP 2006529208 A JP2006529208 A JP 2006529208A JP WO2006006714 A1 JPWO2006006714 A1 JP WO2006006714A1
- Authority
- JP
- Japan
- Prior art keywords
- video
- audio
- synchronization signal
- frame
- output
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/434—Disassembling of a multiplex stream, e.g. demultiplexing audio and video streams, extraction of additional data from a video stream; Remultiplexing of multiplex streams; Extraction or processing of SI; Disassembling of packetised elementary stream
- H04N21/4341—Demultiplexing of audio and video streams
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/4302—Content synchronisation processes, e.g. decoder synchronisation
- H04N21/4307—Synchronising the rendering of multiple content streams or additional data on devices, e.g. synchronisation of audio on a mobile phone with the video output on the TV screen
- H04N21/43072—Synchronising the rendering of multiple content streams or additional data on devices, e.g. synchronisation of audio on a mobile phone with the video output on the TV screen of multiple content streams on the same device
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/432—Content retrieval operation from a local storage medium, e.g. hard-disk
- H04N21/4325—Content retrieval operation from a local storage medium, e.g. hard-disk by playing back content from the storage medium
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/439—Processing of audio elementary streams
- H04N21/4392—Processing of audio elementary streams involving audio buffer management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/04—Synchronising
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/41—Structure of client; Structure of client peripherals
- H04N21/426—Internal components of the client ; Characteristics thereof
Abstract
本発明の映像再生同期信号生成方法は、映像データと音声データとを同期して再生するための映像再生同期信号を生成する映像再生同期信号生成方法であって、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップとを有している。 本発明の映像再生同期信号生成方法によれば、音声データから映像再生同期信号を生成することとしているため、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となる。
Description
本発明は、映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置、映像音声同期再生方法、映像音声同期再生プログラム及び映像音声同期再生装置に関する。
映像と音声の再生を行う際、映像と音声とが高精度に同期して再生されないと、視聴者はその同期ずれを違和感として感じることがある。このような違和感を与えないように映像と音声とを高精度に同期させること、あるいは、そのための技術を「リップシンク」または「リップ同期」、「AV(Audio−Video)同期」などと呼んでいる。
映像と音声とでは、再生に用いられるクロックの周波数が異なることから、通常の映像音声再生装置では、それぞれに異なるタイマを用意し、それぞれに用意されたタイマのリソースを管理する必要がある。このような構成の場合、映像再生用と音声再生用のそれぞれのタイマに誤差があると、映像と音声の再生タイミングの誤差が蓄積して、リップシンクが維持できなくなるという問題がある。
そこで、これに対処するための技術として、音声データ出力用カウンタによって音声データの出力サンプル数をカウントし、このカウント値に基づいて映像再生用のタイマを補正するという技術が提案されている(例えば、特許文献1参照。)。特許文献1に記載された技術によれば、音声再生用のタイマに基づいて映像再生用のタイマを補正することとしているため、映像と音声の再生タイミングの誤差が蓄積してしまうことを抑制することができる。
特開2003−339023号公報
映像と音声とでは、再生に用いられるクロックの周波数が異なることから、通常の映像音声再生装置では、それぞれに異なるタイマを用意し、それぞれに用意されたタイマのリソースを管理する必要がある。このような構成の場合、映像再生用と音声再生用のそれぞれのタイマに誤差があると、映像と音声の再生タイミングの誤差が蓄積して、リップシンクが維持できなくなるという問題がある。
そこで、これに対処するための技術として、音声データ出力用カウンタによって音声データの出力サンプル数をカウントし、このカウント値に基づいて映像再生用のタイマを補正するという技術が提案されている(例えば、特許文献1参照。)。特許文献1に記載された技術によれば、音声再生用のタイマに基づいて映像再生用のタイマを補正することとしているため、映像と音声の再生タイミングの誤差が蓄積してしまうことを抑制することができる。
しかしながら、特許文献1に記載された技術においては、映像再生用及び音声再生用のそれぞれのタイマのリソースを用意してそれを管理する必要があるという問題がある。
また、特許文献1に記載された技術を、リアルタイム性能の高くないノン・プリエンプティブなマルチタスクオペレーティングシステム(以下、オペレーティングシステムをOSという。)上での映像音声同期再生に適用した場合には、マルチタスクOSのタスクスケジューリング周期に束縛され、所望のタイミングで映像再生同期信号を出力することができないという問題がある。
なお、ここでいう「リアルタイム性能の高くないマルチタスクOS」とは、例えば、何らかの割り込みがあったとき、その割り込みに対する瞬時の応答の確実性が保証されていないマルチタスクOS、すなわちハードリアルタイム処理を行うことのできないマルチタスクOSのことをいうものとする。また、ここでいう「ノン・プリエンプティブなマルチタスクOS」とは、CPU上で一のタスク(プロセスということもある。)の処理が行われている場合には、一のタスクよりも優先度の高い他のタスクが生じたとしても、一のタスクから他のタスクに切り替えられるまでの応答時間が保証されないマルチタスクOSをいうものとする。
以下、リアルタイム性能の高くないノン・プリエンプティブなマルチタスクOS(以下では単にノン・プリエンプティブなマルチタスクOSという。)のタスクスケジューリングについて説明する。
図17はノン・プリエンプティブなマルチタスクOSのタスクスケジューリングについて説明する図である。ここでは説明を単純にするためシステム中のCPUの個数は1個とし、CPUではSMT(Simultaneous Multi Thread)技術を利用していないものとする。図17において、Ttはノン・プリエンプティブなマルチタスクOSのタスクスケジューリング周期(OSによるタイマ割り込み周期)であり、このタスクスケジューリング周期Ttによって複数のタスクの切り替えが可能となる。また、Tiは所望とする周期であり、例えば、映像データのフレーム更新を行うための映像同期再生信号を出力させるべき周期であるとする。
また、マルチタスクであるので、処理すべき複数のタスクA,A’,B,Cがあるものとし、タスクA’は映像のフレーム更新を行うためのタスクであるとする。また、図17中の(a)に示すように、タスクAにはTi後にタスクA’が処理されるような内容が設定されているものであるとする。
図17からもわかるように、タスクA,A’,B,Cがタスクスケジューリング周期Ttによって切り替えられながらそれぞれ動作を行う。この場合、タスクAの処理開始からTi後にタスクA’が処理され、その後、タスクA’が周期Tiごとに処理されるのが理想である。従って、図17中の(b)に示すように、タスクA’はタスクAの処理開始からTi後のタイミングt1において処理開始となるべきである。
しかしながら、この場合、図17中の(c)に示すように、タイミングt1においてはタスクCが処理中であるため、他のタスクにCPU時間を与えることはできず、タスクA’を処理することができない。
そして、タスクCの終了するタイミングt1’になると、図17中の(d)に示すように、CPU時間が割り当てられて、タスクA’の処理が可能となる。従って、この時点においては、本来処理したいタイミングt1に対してΔt時間の誤差が生じることとなる。
そして、図17中の(e)に示すように、再度、Ti後にタスクA’が処理されるような内容が設定されるため、タスクA’は、図17中の(f)に示すように、タイミングt2’で処理されるような設定となる。
しかしながら、タイミングt2’においては、タスクCが処理中であるため、他のタスクにCPU時間が与えることができず、タスクA’を処理することができない。その後、タスクCの処理が終了してタイミングt2”になると、図17中の(g)に示すように、CPU時間が割り当てられて、タスクA’を処理することが可能となる。従って、この時点では、本来処理したいタイミングt2に対して誤差がさらに累積してΔt’となる。
このように、映像データのフレーム更新を正確なタイミングで処理するためには、OSのタスクスケジューリング周期よりも精細なタイミングを取得できるようにする必要があるが、ノン・プリエンプティブなマルチタスクOSにおいては、タスクスケジューリング周期Ttでしか各タスクの切り替えを行うことができない。
このようなマルチタスクOSにおいて、そのタスクスケジューリング周期よりも精細なタイミングを取得できるようにする方法としては、マルチタスクOSのカーネル空間で何らかの処理を行うことによって、タスクスケジューリング周期よりも精細な周期でのタイミングを取得することが考えられる。
しかしながら、これを実現しようとすると、一般的なマルチユーザOSの場合には特権モード(例えば、UNIX(登録商標)系OSではroot。)を与える必要がある。特権モードはセキュリティ確保の面から容易に与えられるべきものでないため、一般ユーザが自由に使うことは難しいといった問題がある。
また、本発明のように、映像と音声とを同期させる必要がある場合には、単に精細なタスクスケジューリング周期が得られれば良いというわけではない。仮に、カーネル空間で何らかの処理を行うことによって、映像データのフレームレートに相当する周期が得られたとしても、さらに、映像と音声とを同期させる処理をも加える必要があるので、複雑な時間管理が必要となり、実装が困難なものになる。
そこで、本発明は、高精度なリップシンクが可能でタイマリソースの管理が容易な映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置を提供することを第1の目的とする。
また、本発明は、ノン・プリエンプティブなマルチタスクOSを用いて映像音声同期再生を行う場合にマルチタスクOSのタスクスケジューリング周期に束縛されることなく正確な映像再生同期信号を生成することが可能な映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置を提供することを第2の目的とする。
さらにまた、上記のような映像再生同期信号生成方法によって生成された映像再生同期信号を用いたフレーム更新を行うことにより、高精度なリップシンクが可能でタイマリソースの管理が容易な映像音声同期再生方法、映像音声同期再生プログラム及び映像音声同期再生装置を提供することを第3の目的とする。
(1)本発明の映像再生同期信号生成方法は、映像データと音声データとを同期して再生するための映像再生同期信号を生成する映像再生同期信号生成方法であって、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップとを有することを特徴とする。
このため、本発明の映像再生同期信号生成方法によれば、音声データから映像再生同期信号を生成することとしているため、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第1の目的が達成される。
なお、本発明において、音声再生部に対する出力処理終了タイミングというのは、例えば、音声再生部に設けられるD/A変換器などに対する音声データの出力処理の終了タイミングなどをいう。なお、本発明でいう映像のフレームには、インターレース方式の映像フォーマットにおけるフィールドの概念も含まれている。また、本発明でいう音声には、人間の話声音のみならず、ありとあらゆる音が含まれるものとする。
(2)本発明の映像再生同期信号生成方法においては、前記出力処理終了タイミング取得ステップにおいては、前記音声再生部に対して出力される音声データの出力サンプル数のカウント値が所定値となるタイミングを、前記出力処理終了タイミングとして取得することが好ましい。
このような方法とすることにより、所定値を「1フレーム相当音声データ」に含まれる出力サンプル数に設定しておけば、映像データのフレームごとに音声再生のタイミングに正確に同期した映像再生同期信号を生成することができる。
(3)本発明の映像再生同期信号生成方法においては、前記出力処理終了タイミング取得ステップにおいては、前記音声再生部に対して出力される音声データの所定位置に立てられたフラグを検出するタイミングを、前記出力処理終了タイミングとして取得することが好ましい。
このような方法とすることにより、フラグを立てる位置を「1フレーム相当音声データ」の最終位置に設定しておけば、映像データのフレームごとに音声再生のタイミングに正確に同期した映像再生同期信号を生成することができる。
(4)本発明の映像再生同期信号生成方法においては、前記出力処理終了タイミング取得ステップにおいては、前記1フレーム相当音声データのブロックが前記音声再生部に対して転送されるタイミングを、前記出力処理終了タイミングとして取得することが好ましい。
このような方法とすることにより、上記したブロックが音声再生部に対して転送されるタイミングが「1フレーム相当音声データ」の音声再生部に対する出力処理終了タイミングとなるため、映像データのフレームごとに音声再生のタイミングに正確に同期した映像再生同期信号を生成することができる。
この場合、上記したブロックのサイズは、音声データの出力サンプル数、量子化ビット数、出力チャネル数から算出することができる。
(5)本発明の映像再生同期信号生成方法は、ノン・プリエンプティブなマルチタスクオペレーティングシステムを用いて前記映像再生同期信号を生成する場合にも適用することができる。
このため、ノン・プリエンプティブなマルチタスクOSを用いて映像音声同期再生を行う場合にも、マルチタスクOSのタスクスケジューリング周期に束縛されることなく正確な映像再生同期信号を生成することが可能となるという効果も得られるようになり、本発明の第2の目的も達成される。
(6)本発明の映像再生同期信号生成方法においては、前記出力処理終了タイミング取得ステップにおいては、前記1フレーム相当音声データがブロックとして前記音声再生部に対して転送される際に発行されるシステムコールに基づいて設定されたブロッキングモードが、前記1フレーム相当音声データのブロックの転送終了によって解除されるタイミングを、前記出力処理終了タイミングとして取得することが好ましい。
このような方法とすることにより、タスクスケジューリングの周期よりも精細なタイミングで出力処理終了タイミングを取得することが可能になるため、映像データのフレームごとに音声再生のタイミングに正確に同期した映像再生同期信号を生成することができる。
(7)本発明の映像再生同期信号生成方法においては、前記1フレーム相当音声データの出力サンプル数を、映像データのフレームごとに設定可能な出力サンプル数設定ステップをさらに有し、前記出力サンプル数設定ステップによって設定された前記出力サンプル数に基づいて、映像データのフレームごとに前記出力処理終了タイミング取得ステップを実行することが好ましい。
このような方法とすることにより、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合であっても、映像データのフレームごとに音声データの出力サンプル数を適切に設定することで、映像と音声とを長時間再生したときでもリップシンクのずれを生じないようにすることができる。
(8)本発明の映像再生同期信号生成方法においては、前記出力サンプル数設定ステップにおいては、前記出力サンプル数の平均値が所定値と等しくなるか近似するように、前記出力サンプル数を決定することが好ましい。
このような方法とすることにより、長いスパンで平均したときの音声データの出力サンプル数を、映像データ1フレームの表示期間に相当する理想の出力サンプル数と等しくなるか又は近似するようにすることができ、映像と音声とを長時間再生したときでもリップシンクのずれを生じないようにすることができる。
(9)本発明の映像再生同期信号生成方法においては、前記出力サンプル数の決定は、ブレゼンハム(Bresenham)のアルゴリズムを用いて行うことが好ましい。
このような方法とすることにより、「1フレーム相当音声データ」の出力サンプル数を、ジッタを最小にしつつ適切に設定することができる。
(10)本発明の映像再生同期信号生成方法においては、前記出力サンプル数設定ステップにおいては、音声データのサンプリングレートと映像データのフレームレートとに基づいて前記出力サンプル数を決定するルールが記載されたテーブルを参照することによって、前記出力サンプル数を決定することも好ましい。
このような方法とすることにより、上記したテーブルを参照して「1フレーム相当音声データ」の出力サンプル数を映像データのフレームごとに決定することで、「1フレーム相当音声データ」の出力サンプル数を少ない演算量で適切に設定することができる。
(11)本発明の映像再生同期信号生成プログラムは、映像データと音声データとを同期して再生するための映像再生同期信号を生成するタイミング制御装置に、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップとを実行させる手順を有することを特徴とする。
このため、本発明の映像再生同期信号生成プログラムを用いてタイミング制御装置を動作させることにより、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第1の目的が達成される。
(12)本発明のタイミング制御装置は、映像データと音声データとを同期して再生するための映像再生同期信号を生成するタイミング制御装置であって、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得して、前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成することを特徴とする。
このため、本発明のタイミング制御装置によれば、音声データから映像再生同期信号を生成することとしているため、本発明のタイミング制御装置を用いて映像再生同期信号を生成することにより、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第1の目的が達成される。
(13)本発明の映像音声同期再生方法は、映像データと音声データとを同期して再生する映像音声同期再生方法であって、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップと、前記映像再生同期信号によって映像データのフレーム更新を行うフレーム更新ステップとを有することを特徴とする。
このため、本発明の映像音声同期再生方法によれば、音声データから映像再生同期信号を生成し、この映像再生同期信号を用いて映像音声同期再生を行うこととしているため、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第3の目的が達成される。
(14)本発明の映像音声同期再生プログラムは、映像データと音声データとを同期して再生可能な映像音声同期再生装置に、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成する映像再生同期信号生成ステップと、前記映像再生同期信号によって映像データのフレーム更新を行うフレーム更新ステップとを実行させる手順を有することを特徴とする。
このため、本発明の映像音声同期再生プログラムを用いて映像音声同期再生を行うことにより、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第3の目的が達成される。
(15)本発明の映像音声同期再生装置は、映像データと音声データとを同期して再生可能な映像音声同期再生装置であって、音声データに基づいて音声再生処理を行う音声再生部と、映像データに基づいて映像再生処理を行う映像再生部と、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得して、前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成するタイミング制御部とを有し、前記映像再生部は、前記映像再生同期信号に基づいてフレーム更新を行うことを特徴とする。
このため、本発明の映像音声同期再生装置によれば、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第3の目的が達成される。
また、特許文献1に記載された技術を、リアルタイム性能の高くないノン・プリエンプティブなマルチタスクオペレーティングシステム(以下、オペレーティングシステムをOSという。)上での映像音声同期再生に適用した場合には、マルチタスクOSのタスクスケジューリング周期に束縛され、所望のタイミングで映像再生同期信号を出力することができないという問題がある。
なお、ここでいう「リアルタイム性能の高くないマルチタスクOS」とは、例えば、何らかの割り込みがあったとき、その割り込みに対する瞬時の応答の確実性が保証されていないマルチタスクOS、すなわちハードリアルタイム処理を行うことのできないマルチタスクOSのことをいうものとする。また、ここでいう「ノン・プリエンプティブなマルチタスクOS」とは、CPU上で一のタスク(プロセスということもある。)の処理が行われている場合には、一のタスクよりも優先度の高い他のタスクが生じたとしても、一のタスクから他のタスクに切り替えられるまでの応答時間が保証されないマルチタスクOSをいうものとする。
以下、リアルタイム性能の高くないノン・プリエンプティブなマルチタスクOS(以下では単にノン・プリエンプティブなマルチタスクOSという。)のタスクスケジューリングについて説明する。
図17はノン・プリエンプティブなマルチタスクOSのタスクスケジューリングについて説明する図である。ここでは説明を単純にするためシステム中のCPUの個数は1個とし、CPUではSMT(Simultaneous Multi Thread)技術を利用していないものとする。図17において、Ttはノン・プリエンプティブなマルチタスクOSのタスクスケジューリング周期(OSによるタイマ割り込み周期)であり、このタスクスケジューリング周期Ttによって複数のタスクの切り替えが可能となる。また、Tiは所望とする周期であり、例えば、映像データのフレーム更新を行うための映像同期再生信号を出力させるべき周期であるとする。
また、マルチタスクであるので、処理すべき複数のタスクA,A’,B,Cがあるものとし、タスクA’は映像のフレーム更新を行うためのタスクであるとする。また、図17中の(a)に示すように、タスクAにはTi後にタスクA’が処理されるような内容が設定されているものであるとする。
図17からもわかるように、タスクA,A’,B,Cがタスクスケジューリング周期Ttによって切り替えられながらそれぞれ動作を行う。この場合、タスクAの処理開始からTi後にタスクA’が処理され、その後、タスクA’が周期Tiごとに処理されるのが理想である。従って、図17中の(b)に示すように、タスクA’はタスクAの処理開始からTi後のタイミングt1において処理開始となるべきである。
しかしながら、この場合、図17中の(c)に示すように、タイミングt1においてはタスクCが処理中であるため、他のタスクにCPU時間を与えることはできず、タスクA’を処理することができない。
そして、タスクCの終了するタイミングt1’になると、図17中の(d)に示すように、CPU時間が割り当てられて、タスクA’の処理が可能となる。従って、この時点においては、本来処理したいタイミングt1に対してΔt時間の誤差が生じることとなる。
そして、図17中の(e)に示すように、再度、Ti後にタスクA’が処理されるような内容が設定されるため、タスクA’は、図17中の(f)に示すように、タイミングt2’で処理されるような設定となる。
しかしながら、タイミングt2’においては、タスクCが処理中であるため、他のタスクにCPU時間が与えることができず、タスクA’を処理することができない。その後、タスクCの処理が終了してタイミングt2”になると、図17中の(g)に示すように、CPU時間が割り当てられて、タスクA’を処理することが可能となる。従って、この時点では、本来処理したいタイミングt2に対して誤差がさらに累積してΔt’となる。
このように、映像データのフレーム更新を正確なタイミングで処理するためには、OSのタスクスケジューリング周期よりも精細なタイミングを取得できるようにする必要があるが、ノン・プリエンプティブなマルチタスクOSにおいては、タスクスケジューリング周期Ttでしか各タスクの切り替えを行うことができない。
このようなマルチタスクOSにおいて、そのタスクスケジューリング周期よりも精細なタイミングを取得できるようにする方法としては、マルチタスクOSのカーネル空間で何らかの処理を行うことによって、タスクスケジューリング周期よりも精細な周期でのタイミングを取得することが考えられる。
しかしながら、これを実現しようとすると、一般的なマルチユーザOSの場合には特権モード(例えば、UNIX(登録商標)系OSではroot。)を与える必要がある。特権モードはセキュリティ確保の面から容易に与えられるべきものでないため、一般ユーザが自由に使うことは難しいといった問題がある。
また、本発明のように、映像と音声とを同期させる必要がある場合には、単に精細なタスクスケジューリング周期が得られれば良いというわけではない。仮に、カーネル空間で何らかの処理を行うことによって、映像データのフレームレートに相当する周期が得られたとしても、さらに、映像と音声とを同期させる処理をも加える必要があるので、複雑な時間管理が必要となり、実装が困難なものになる。
そこで、本発明は、高精度なリップシンクが可能でタイマリソースの管理が容易な映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置を提供することを第1の目的とする。
また、本発明は、ノン・プリエンプティブなマルチタスクOSを用いて映像音声同期再生を行う場合にマルチタスクOSのタスクスケジューリング周期に束縛されることなく正確な映像再生同期信号を生成することが可能な映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置を提供することを第2の目的とする。
さらにまた、上記のような映像再生同期信号生成方法によって生成された映像再生同期信号を用いたフレーム更新を行うことにより、高精度なリップシンクが可能でタイマリソースの管理が容易な映像音声同期再生方法、映像音声同期再生プログラム及び映像音声同期再生装置を提供することを第3の目的とする。
(1)本発明の映像再生同期信号生成方法は、映像データと音声データとを同期して再生するための映像再生同期信号を生成する映像再生同期信号生成方法であって、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップとを有することを特徴とする。
このため、本発明の映像再生同期信号生成方法によれば、音声データから映像再生同期信号を生成することとしているため、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第1の目的が達成される。
なお、本発明において、音声再生部に対する出力処理終了タイミングというのは、例えば、音声再生部に設けられるD/A変換器などに対する音声データの出力処理の終了タイミングなどをいう。なお、本発明でいう映像のフレームには、インターレース方式の映像フォーマットにおけるフィールドの概念も含まれている。また、本発明でいう音声には、人間の話声音のみならず、ありとあらゆる音が含まれるものとする。
(2)本発明の映像再生同期信号生成方法においては、前記出力処理終了タイミング取得ステップにおいては、前記音声再生部に対して出力される音声データの出力サンプル数のカウント値が所定値となるタイミングを、前記出力処理終了タイミングとして取得することが好ましい。
このような方法とすることにより、所定値を「1フレーム相当音声データ」に含まれる出力サンプル数に設定しておけば、映像データのフレームごとに音声再生のタイミングに正確に同期した映像再生同期信号を生成することができる。
(3)本発明の映像再生同期信号生成方法においては、前記出力処理終了タイミング取得ステップにおいては、前記音声再生部に対して出力される音声データの所定位置に立てられたフラグを検出するタイミングを、前記出力処理終了タイミングとして取得することが好ましい。
このような方法とすることにより、フラグを立てる位置を「1フレーム相当音声データ」の最終位置に設定しておけば、映像データのフレームごとに音声再生のタイミングに正確に同期した映像再生同期信号を生成することができる。
(4)本発明の映像再生同期信号生成方法においては、前記出力処理終了タイミング取得ステップにおいては、前記1フレーム相当音声データのブロックが前記音声再生部に対して転送されるタイミングを、前記出力処理終了タイミングとして取得することが好ましい。
このような方法とすることにより、上記したブロックが音声再生部に対して転送されるタイミングが「1フレーム相当音声データ」の音声再生部に対する出力処理終了タイミングとなるため、映像データのフレームごとに音声再生のタイミングに正確に同期した映像再生同期信号を生成することができる。
この場合、上記したブロックのサイズは、音声データの出力サンプル数、量子化ビット数、出力チャネル数から算出することができる。
(5)本発明の映像再生同期信号生成方法は、ノン・プリエンプティブなマルチタスクオペレーティングシステムを用いて前記映像再生同期信号を生成する場合にも適用することができる。
このため、ノン・プリエンプティブなマルチタスクOSを用いて映像音声同期再生を行う場合にも、マルチタスクOSのタスクスケジューリング周期に束縛されることなく正確な映像再生同期信号を生成することが可能となるという効果も得られるようになり、本発明の第2の目的も達成される。
(6)本発明の映像再生同期信号生成方法においては、前記出力処理終了タイミング取得ステップにおいては、前記1フレーム相当音声データがブロックとして前記音声再生部に対して転送される際に発行されるシステムコールに基づいて設定されたブロッキングモードが、前記1フレーム相当音声データのブロックの転送終了によって解除されるタイミングを、前記出力処理終了タイミングとして取得することが好ましい。
このような方法とすることにより、タスクスケジューリングの周期よりも精細なタイミングで出力処理終了タイミングを取得することが可能になるため、映像データのフレームごとに音声再生のタイミングに正確に同期した映像再生同期信号を生成することができる。
(7)本発明の映像再生同期信号生成方法においては、前記1フレーム相当音声データの出力サンプル数を、映像データのフレームごとに設定可能な出力サンプル数設定ステップをさらに有し、前記出力サンプル数設定ステップによって設定された前記出力サンプル数に基づいて、映像データのフレームごとに前記出力処理終了タイミング取得ステップを実行することが好ましい。
このような方法とすることにより、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合であっても、映像データのフレームごとに音声データの出力サンプル数を適切に設定することで、映像と音声とを長時間再生したときでもリップシンクのずれを生じないようにすることができる。
(8)本発明の映像再生同期信号生成方法においては、前記出力サンプル数設定ステップにおいては、前記出力サンプル数の平均値が所定値と等しくなるか近似するように、前記出力サンプル数を決定することが好ましい。
このような方法とすることにより、長いスパンで平均したときの音声データの出力サンプル数を、映像データ1フレームの表示期間に相当する理想の出力サンプル数と等しくなるか又は近似するようにすることができ、映像と音声とを長時間再生したときでもリップシンクのずれを生じないようにすることができる。
(9)本発明の映像再生同期信号生成方法においては、前記出力サンプル数の決定は、ブレゼンハム(Bresenham)のアルゴリズムを用いて行うことが好ましい。
このような方法とすることにより、「1フレーム相当音声データ」の出力サンプル数を、ジッタを最小にしつつ適切に設定することができる。
(10)本発明の映像再生同期信号生成方法においては、前記出力サンプル数設定ステップにおいては、音声データのサンプリングレートと映像データのフレームレートとに基づいて前記出力サンプル数を決定するルールが記載されたテーブルを参照することによって、前記出力サンプル数を決定することも好ましい。
このような方法とすることにより、上記したテーブルを参照して「1フレーム相当音声データ」の出力サンプル数を映像データのフレームごとに決定することで、「1フレーム相当音声データ」の出力サンプル数を少ない演算量で適切に設定することができる。
(11)本発明の映像再生同期信号生成プログラムは、映像データと音声データとを同期して再生するための映像再生同期信号を生成するタイミング制御装置に、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップとを実行させる手順を有することを特徴とする。
このため、本発明の映像再生同期信号生成プログラムを用いてタイミング制御装置を動作させることにより、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第1の目的が達成される。
(12)本発明のタイミング制御装置は、映像データと音声データとを同期して再生するための映像再生同期信号を生成するタイミング制御装置であって、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得して、前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成することを特徴とする。
このため、本発明のタイミング制御装置によれば、音声データから映像再生同期信号を生成することとしているため、本発明のタイミング制御装置を用いて映像再生同期信号を生成することにより、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第1の目的が達成される。
(13)本発明の映像音声同期再生方法は、映像データと音声データとを同期して再生する映像音声同期再生方法であって、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップと、前記映像再生同期信号によって映像データのフレーム更新を行うフレーム更新ステップとを有することを特徴とする。
このため、本発明の映像音声同期再生方法によれば、音声データから映像再生同期信号を生成し、この映像再生同期信号を用いて映像音声同期再生を行うこととしているため、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第3の目的が達成される。
(14)本発明の映像音声同期再生プログラムは、映像データと音声データとを同期して再生可能な映像音声同期再生装置に、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成する映像再生同期信号生成ステップと、前記映像再生同期信号によって映像データのフレーム更新を行うフレーム更新ステップとを実行させる手順を有することを特徴とする。
このため、本発明の映像音声同期再生プログラムを用いて映像音声同期再生を行うことにより、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第3の目的が達成される。
(15)本発明の映像音声同期再生装置は、映像データと音声データとを同期して再生可能な映像音声同期再生装置であって、音声データに基づいて音声再生処理を行う音声再生部と、映像データに基づいて映像再生処理を行う映像再生部と、映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得して、前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成するタイミング制御部とを有し、前記映像再生部は、前記映像再生同期信号に基づいてフレーム更新を行うことを特徴とする。
このため、本発明の映像音声同期再生装置によれば、音声再生用タイマのリソースのみを基準にして映像データのフレーム更新を行うことが可能になるため、高精度なリップシンクが可能、かつ、タイマリソースの管理が容易となり、本発明の第3の目的が達成される。
図1は、本発明の基本的な概念について説明するための図である。
図2は、本発明の映像音声同期再生装置の機能を概略的に説明する図である。
図3は、実施形態1に係る映像音声同期再生装置の動作概念を説明する図である。
図4は、音声デコーダ12の処理手順を説明するフローチャートである。
図5は、映像デコーダ13の処理手順を説明するフローチャートである。
図6は、音声再生部16の音声再生処理に基づく映像再生同期信号生成方法(第1の映像再生同期信号生成方法)について説明する図である。
図7は、音声再生部16の音声再生処理に基づく映像再生同期信号生成方法(第2の映像再生同期信号生成方法)について説明する図である。
図8は、音声再生部16の音声再生処理に基づく映像再生同期信号生成方法(第3の映像再生同期信号生成方法)について説明する図である。
図9は、第3の映像再生同期信号生成方法における音声データブロックの音声データバッファ14への書き込みを示す図である。
図10は、第3の映像生成タイミング生成方法を用いた場合の音声及び映像の再生動作例を説明するための図である。
図11は、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合における音声データと映像データとの関係を説明する図である。
図12は、映像の1フレームごとにブレゼンハムのアルゴリズムを用いて各フレームに対応する出力サンプル数を求めた結果の一例を示す図である。
図13は、フレームレートとサンプリングレートとに基づいて予め決められたルールの参照を可能とするテーブルの一例を示す図である。
図14は、実施形態2に係る映像音声同期再生装置における映像再生同期信号生成方法の一例について説明する図である。
図15は、ノン・プリエンプティブなマルチタスクOSを用いて、音声出力を利用して精細なタスクスケジューリング周期を得る方法について説明する図である。
図16は、実施形態2に係る映像音声同期再生装置における映像音声同期再生処理をノン・プリエンプティブなマルチタスクOSを用いて処理させる場合を概念的に示す図である。
図17は、ノン・プリエンプティブなマルチタスクOSのタスクスケジューリングについて説明する図である。
図2は、本発明の映像音声同期再生装置の機能を概略的に説明する図である。
図3は、実施形態1に係る映像音声同期再生装置の動作概念を説明する図である。
図4は、音声デコーダ12の処理手順を説明するフローチャートである。
図5は、映像デコーダ13の処理手順を説明するフローチャートである。
図6は、音声再生部16の音声再生処理に基づく映像再生同期信号生成方法(第1の映像再生同期信号生成方法)について説明する図である。
図7は、音声再生部16の音声再生処理に基づく映像再生同期信号生成方法(第2の映像再生同期信号生成方法)について説明する図である。
図8は、音声再生部16の音声再生処理に基づく映像再生同期信号生成方法(第3の映像再生同期信号生成方法)について説明する図である。
図9は、第3の映像再生同期信号生成方法における音声データブロックの音声データバッファ14への書き込みを示す図である。
図10は、第3の映像生成タイミング生成方法を用いた場合の音声及び映像の再生動作例を説明するための図である。
図11は、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合における音声データと映像データとの関係を説明する図である。
図12は、映像の1フレームごとにブレゼンハムのアルゴリズムを用いて各フレームに対応する出力サンプル数を求めた結果の一例を示す図である。
図13は、フレームレートとサンプリングレートとに基づいて予め決められたルールの参照を可能とするテーブルの一例を示す図である。
図14は、実施形態2に係る映像音声同期再生装置における映像再生同期信号生成方法の一例について説明する図である。
図15は、ノン・プリエンプティブなマルチタスクOSを用いて、音声出力を利用して精細なタスクスケジューリング周期を得る方法について説明する図である。
図16は、実施形態2に係る映像音声同期再生装置における映像音声同期再生処理をノン・プリエンプティブなマルチタスクOSを用いて処理させる場合を概念的に示す図である。
図17は、ノン・プリエンプティブなマルチタスクOSのタスクスケジューリングについて説明する図である。
以下、各実施形態に基づいて本発明を詳細に説明する。
[実施形態1]
図1は、本発明の基本的な概念について説明するための図である。
本発明の映像再生同期信号生成方法においては、図1に示すように、映像データ1フレームの表示期間に相当するPCM(Pulse Code Modulation)音声データ(本発明の「1フレーム相当音声データ」に対応。)が音声再生部に出力処理されたタイミング(これを出力処理終了タイミングという。)で、映像データのフレーム更新を行うための映像再生同期信号を出力することとしている。なお、音声再生部16に対する出力処理終了タイミングというのは、実施形態1においては、音声再生部16に設けられるD/A変換器161に対する音声データの出力処理終了タイミングとしている。
具体的な例で説明すると、映像データのフレームレートが30[frame/sec]、PCM音声データ(以下では単に音声データという。)のサンプリングレートが44.1[KHz]であったとする。この場合、音声データのサンプリングレートを映像データのフレームレートで割り算して得られた1470[sample]を音声データの1つのブロックとし、その1470[sample]の音声データのブロックがD/A変換器161に出力されるタイミングで映像データのフレーム更新を行うための映像再生同期信号を出力する。そして、映像再生部17(図2参照。)側では、この映像再生同期信号を用いてフレーム更新を行うようにする。
これによって、音声再生用タイマのリソースのみを基準にして映像再生同期信号を生成することが可能となる。このため、映像再生部17側では、この映像再生同期信号を用いてフレーム更新を行うようにしているので、高精度なリップシンクが可能となり、また、タイマのリソースは音声再生側のみに用意すればよいことから、タイマのリソースの管理を容易なものとすることができる。
図2は、本発明の映像音声同期再生装置の機能を概略的に説明する図である。映像音声同期再生装置は、映像・音声多重化ストリームデータから音声ストリームデータADと映像ストリームデータVDとシステムデータSDとに分離する機能を有するデマルチプレクサ11、音声ストリームデータADをデコードする音声デコーダ12、映像ストリームデータVDをデコードする映像デコーダ13、デコード後の音声データを記憶する音声データバッファ14、デコード後の映像データをフレーム単位で記憶する映像フレームバッファ15、音声データバッファ14に記憶された音声データを順次入力して再生する音声再生部16、映像フレームバッファ15に記憶された映像データを順次入力して再生する映像再生部17、音声と映像とを同期させるためのタイミング制御を行うタイミング制御部18、音声再生部16で音声再生処理された音声信号を音声として出力する音声出力部19及び映像再生部17で映像再生処理された映像信号を映像として出力する映像出力部20を有している。
音声データバッファ14は、リングバッファなどのようなFIFOの機能を有するものである。なお、音声データはリニアPCM形式で音声データバッファ14に記憶される。また、映像フレームバッファ15は、例えば、3フレーム分の映像データをそれぞれのフレームごとに記憶可能な記憶領域151〜153を有している。
また、音声再生部16は、図1に示すように、D/A変換器161、クロックジェネレータ162、ローパスフィルタ(LPF)163を有しており、音声出力部19に接続されている。
タイミング制御部18は、デマルチプレクサ11からのシステムデータSD(サンプリングレートやフレームレートなど。)及び音声再生部16のクロックジェネレータ162からのクロックに基づいて、映像1フレームの表示期間に相当する音声データの出力サンプル数の設定を行う機能を有している。また、タイミング制御部18は、映像データ1フレームの表示期間に相当する音声データのD/A変換器161に対する出力処理終了タイミング(この出力処理終了タイミングについては後述する。)を取得して、出力処理終了タイミングを取得するごとに映像再生同期信号を生成し、その映像再生同期信号を映像再生部17に出力する機能を有している。このタイミング制御部18の具体的な動作については後述する。
また、映像再生部17は、映像再生同期信号によって映像出力部20に対してフレーム更新のための信号を出力する。
図3は、実施形態1に係る映像音声同期再生装置の動作概念を説明する図である。タスクスイッチャTSWは、簡単なタスクスケジューリング機能を有するもので、この図3の例では、デマルチプレクサ11、音声デコーダ12及び映像デコーダ13の動作切り替えを行う。例えば、音声デコーダ12に動作の権利を与えれば、音声デコーダ12による音声データの音声データバッファ14への書き込み動作が可能となり、映像デコーダ13に動作権利を与えれば、映像データの映像フレームバッファ15への書き込み動作が可能となる。
音声データバッファ14に書き込まれた音声データのうち、映像データ1フレームの表示期間に相当する音声データの音声再生処理がなされると、映像再生制御VOCに処理が移り、映像フレームの更新がなされ、映像フレームバッファ15に書き込まれている1フレーム分の映像データに対する映像再生処理がなされる。
図4は、音声デコーダ12の処理手順を説明するフローチャートである。図5は、映像デコーダ13の処理手順を説明するフローチャートである。
音声デコーダ12は、図4に示すように、まず、音声ストリームデータADがあるか否かを判定し(ステップS1)、音声ストリームデータADがなければ処理をタスクスイッチャTSW(図4及び図5では「TaskSW」と表記する。)に返し(ステップS2)、音声ストリームデータADがあれば音声データバッファ14に空き領域があるか否かを判定する(ステップS3)。
この判定において、音声データバッファ14に空き領域がなければタスクスイッチャTSWに処理を返し(ステップS4)、音声データバッファ14に空き領域があればデコードを行い(ステップS5)、デコード後の音声データを音声データバッファ14に書き込む(ステップS6)。そして、タスクスイッチャTSWに処理を返す(ステップS7)。
なお、タスクスイッチャTSWに処理を返すということは、タスク処理の権利を自分以外(この例では、デマルチプレクサ11又は映像デコーダ13。)に渡すということである。すなわち、図4の場合は、タスクスイッチャTSWによって、音声デコーダ12からデマルチプレクサ11ないし映像デコーダ13に処理を切り替えられることである。また、図4において、タスクスイッチャTSWから戻る矢印は、タスク処理の権利が自身に移ることを意味している。これは、図5においても同様である。
一方、映像デコーダ13は、図5に示すように、まず、映像ストリームデータVDがあるか否かを判定し(ステップS11)、映像ストリームデータVDがなければタスクスイッチャTSWに処理を返し(ステップS12)、映像ストリームデータVDがあれば映像フレームバッファ15に空き領域があるか否かを判定する(ステップS13)。
この判定において、映像フレームバッファ15に空き領域がなければタスクスイッチャTSWに処理を返し(ステップS14)、映像フレームバッファ15に空き領域があればデコードを行い(ステップS15)、デコード後のフレームを映像フレームバッファ15の空き領域に書き込む(ステップS16)。そして、タスクスイッチャTSWに処理を返す(ステップS17)。
なお、映像データの映像フレームバッファ15への書き込みは、図5におけるステップS16の書き込み動作例として示すように、例えば、映像データの各フレームをフレームF1,F2,F3,・・・で表せば、フレームF1をまず空きの記憶領域(この場合、初期状態として3つの記憶領域151〜153はすべて空き領域であるとする。)151に書き込み、次に、フレームF2を記憶領域152に書き込み、次にフレームF3を記憶領域153に書き込むというように記憶領域151〜153に順番に書き込む。
そして、記憶領域151〜153に書き込まれた映像データは、フレームF1,フレームF2,・・・の順序で順次出力されるので、記憶領域151,152,・・・の順序で空き領域となる。従って、フレームF4は記憶領域151に、フレームF5は記憶領域152に書き込むというような順序で記憶領域151〜153に順番に書き込まれる。
図6〜図8は、音声再生部16の音声再生処理に基づく映像再生同期信号生成方法について説明する図である。なお、図6に示す方法を第1の映像再生同期信号生成方法といい、図7に示す方法を第2の映像再生同期信号生成方法といい、図8に示す方法を第3の映像再生同期信号生成方法ということにする。
まず、第1の映像再生同期信号生成方法について、図6を参照しながら説明する。
図6において、タイミング制御部18では、音声データの出力サンプル数を所定値に設定する。(ステップS21)。この所定値は、映像データ1フレームに対応する音声データ(1フレーム相当音声データ)の出力サンプル数である。
そして、音声再生部16では、D/A変換器161に対して音声データサンプルを出力し(ステップS31)、出力済みのサンプル数(これを出力サンプル数という。)がタイミング制御部18で設定された所定値に達したか否かを判定する(ステップS32)。この判定の結果、出力サンプル数のカウント値が所定値に達したと判定すれば、所定値に達したことを示す信号をタイミング制御部18に出力する。
タイミング制御部18は、音声再生部16から出力サンプル数が所定値に達したことを示す信号を受けると映像再生同期信号を生成し、映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)を行い(ステップS22)、ステップS21に戻る。
このように、タイミング制御部18では、音声再生部16において、D/A変換器161に対して所定の出力サンプル数が出力されたタイミングを、映像データ1フレームの表示期間に相当する音声データの出力処理終了タイミングとして取得し、その出力処理終了タイミングを取得するごとに映像再生同期信号を生成して、その映像再生同期信号を映像再生部17に出力する。
映像再生部17では、タイミング制御部18からの映像表示呼び出し(映像再生同期信号)を受けると、ステップS41で取得しておいた映像フレームを表示したのち、表示済みの映像フレームを記憶していた映像フレームバッファ15のある1つの記憶領域を解放する(ステップS42,S43)。
なお、音声デコーダ12と音声再生部16との間及び映像デコーダ13と映像再生部17との間はいずれも非同期で動作しているものとする。ただし、音声デコーダ12及び映像デコーダ13は、音声データバッファ14及び映像フレームバッファ15でそれぞれバッファアンダラン/オーバランが起きないように制御されている。これは、以下に示す図7及び図8においても同様である。
このように、第1の映像再生同期信号生成方法は、D/A変換器161に出力される音声データの出力サンプル数が予め設定された値となるごとに、映像再生部17に対して映像再生同期信号を出力するものである。映像再生部17では、この映像再生同期信号によって映像データのフレーム更新を行う。
具体的には、例えば、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz]であった場合には、映像データ1フレームの表示期間に対応する音声データの出力サンプル数(1470[sample])が音声再生部16のD/A変換器161に出力されるごとに、映像データのフレームの更新がなされる。これによって、映像と音声とを高精度に同期させることができる。
このように、第1の映像再生同期信号生成方法によれば、D/A変換器161に出力される音声データの出力サンプル数をカウントし、そのカウント数が予め設定された値となったタイミングで映像データのフレーム更新を行うようにしているので、映像と音声との同期再生が自動的に実現されることとなる。
次に、第2の映像再生同期信号生成方法について、図7を参照しながら説明する。
図7において、タイミング制御部18は、映像データ1フレームの表示期間に相当する音声データの終端位置にフラグを立てる(ステップS51)。具体的には、音声データ中の音声に直接影響の無い特定のビットに終端であることを示すフラグを立てるなどをする。そして、音声再生部16では、D/A変換器161に対して音声データサンプルを出力し(ステップS61)、タイミング制御部18で立てられたフラグを検出したか否かを判定する(ステップS62)。この判定の結果、フラグを検出したと判定すれば、フラグを検出したことを示す信号をタイミング制御部18に出力する。
タイミング制御部18は、音声再生部16からフラグを検出したことを示す信号を受けると、映像再生同期信号を生成し、映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)を行い(ステップS52)、ステップS51に戻る。
このように、タイミング制御部18では、音声再生部16において、D/A変換器161に対して出力される音声データからフラグが検出されたタイミングを、映像データ1フレームの表示期間に相当する音声データの出力処理終了タイミングとして取得し、その出力処理終了タイミングを取得するごとに映像再生同期信号を生成し、その映像再生同期信号を映像再生部17に出力する。
映像再生部17では、音声再生部16からの映像表示呼び出し(映像再生同期信号)を受けると、図6の場合と同様、ステップS41で取得しておいた映像フレームを表示したのち、表示済みの映像フレームを記憶していた映像フレームバッファ15のある1つの記憶領域を解放する(ステップS42,S43)。
第2の映像再生同期信号生成方法は、映像1フレームの表示期間に相当する音声データから終端を示すフラグを検出すると、映像再生部17に対して映像再生同期信号を出力するものである。映像再生部17では、この映像再生同期信号によって映像データのフレーム更新を行う。
具体的には、例えば、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz]であった場合には、映像データ1フレームの表示期間に相当する出力サンプル数(1470[sample])ごとに、音声データの終端を示すフラグを立てる。そして、その終端を示すフラグが検出されるごとに、映像データのフレームの更新がなされる。これによって、映像と音声とを高精度に同期させることができる。
第2の映像再生同期信号生成方法によれば、出力サンプル数をカウントすることなく音声データの所定のデータ単位を検出することができる。これは、「番兵のアルゴリズム」などを用いることによって実現できる。
次に、第3の映像再生同期信号生成方法について、図8を参照しながら説明する。
第3の映像再生同期信号生成方法は、図8に示すように、所定の出力サンプル数に相当する音声データのブロック(以下、音声データブロックという。)が音声データバッファ14から音声再生部16の音声再生用のバッファに転送されたタイミングで映像データのフレーム更新を行うものである。
第3の映像生成タイミングの生成方法を実現するために、音声データ用のバッファが2段設けられるようなバッファ構成とすることが好ましい。すなわち、音声デコーダ12によるデコード済みの音声データを記憶するための音声データバッファ14と、音声再生部16側に設けられる音声再生用バッファ(図示せず。)との2段のバッファ構成とする。このような2段のバッファ構成とすることによって、音声データを途切れることなく再生することができる。
なお、音声再生用バッファは、D/A変換器161の前段に設けられる。また、この音声再生用バッファは、音声再生部16に専用のバッファとして設けることも可能であるが、音声再生部16が音声再生用バッファとして使用可能な記憶手段をもともと有していればそれを利用することもできる。
第3の映像再生同期信号生成方法を実現する際には、音声データバッファ14は、複数の記憶領域を有するものとし、それぞれの記憶領域に音声データブロックを個々のブロック単位で書き込むことができるようなものであることが好ましい。従って、この場合、音声データバッファ14は、映像フレームバッファ15と同様、例えば、3つの記憶領域141〜143(図9参照。)を有しているものであるとする。
図9は、第3の映像再生同期信号生成方法における音声データブロックの音声データバッファ14への書き込みを示す図である。この音声データブロックの音声データバッファ14への書き込みは、音声デコーダ12によって行われる。その書き込み動作は、映像データの各フレームを映像フレームバッファ15の各記憶領域151〜153へ書き込むのと同様の動作で可能となる。
例えば、図9に示すように、音声データの各音声データブロックを音声データブロックB1,B2,B3,・・・で表せば、音声データブロックB1をまず空きの記憶領域(この場合、初期状態として3つの記憶領域141〜143はすべて空き領域であるとする。)141に書き込み、次に、音声データブロックB2を空きの記憶領域142に書き込み、次に、音声データブロックB3を空きの記憶領域143に書き込むというように順次記憶領域141〜143に書き込む。また、各記憶領域141〜143に書き込まれた音声データブロックB1〜B3の音声再生用バッファへの転送制御は、タイミング制御部18からの転送指示によって行われる。
ここで、図8に説明を戻すと、音声再生部16では、まず、自身が有する音声再生用バッファの記憶領域のうち、再生済みの音声データの1ブロックを記憶していた記憶領域を解放する(ステップS71)。この記憶領域の解放は、音声再生用バッファに書き込まれていた音声データブロックがD/A変換器161に出力されたタイミングで行われる。
タイミング制御部18は、所定の出力サンプル数(映像データ1フレームの表示期間に相当する出力サンプル数)の音声データブロックを、音声データバッファ14から音声再生部16に転送し、転送済みの音声データブロックを記憶していた記憶領域を解放する(ステップS81)。そして、タイミング制御部18は、この音声データブロックの音声再生部16への転送のタイミングを、映像データ1フレームの表示期間に相当する音声データブロックの出力処理終了タイミングとし、その出力処理終了タイミングごとに、映像再生同期信号を生成し、映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)を行い(ステップS82)、ステップS81に戻る。
また、音声再生部16は、音声データバッファ14から転送されてきた音声データブロックを取得して自身の音声再生用バッファに記憶し(ステップS72)、音声再生を行い(ステップS73)、ステップS71に戻る。
映像再生部17では、タイミング制御部18からの映像表示呼び出し(映像再生同期信号)を受けると、図6の場合と同様、ステップS41で取得しておいた映像フレームを表示したのち、表示済みの映像フレームを記憶していた映像フレームバッファ15のある1つの記憶領域を解放する(ステップS42,S43)。
図10は、第3の映像再生同期信号生成方法を用いた場合の音声及び映像の再生動作例を説明するための図である。図10の横軸は時間を示している。図10(A)は音声デコーダ12の音声デコード処理タスクを示す図であり、図10(F)は映像デコーダ13の映像デコード処理タスクを示す図であり、これらはタスクスイッチャTSWによってそれぞれの動作が切り替えられ、CPUによって割り当てられた時間内でデコード処理を行う。なお、デマルチプレクシング処理のタスクについては、必要な処理時間は映像デコード処理タスクや音声デコード処理タスクよりも短いのが一般的であるため、図10には特に記していない。
また、図10(B)は音声データバッファ14における3つの記憶領域141〜143の記憶状態を示す図であり、音声デコーダ12でデコードされた音声データブロックB1が記憶領域141に記憶され、音声デコーダ12でデコードされた音声データブロックB2が記憶領域142に記憶されるというように、順次、デコードされた音声データブロックB1,B2,・・・がそれぞれ記憶領域141,142,・・・に記憶される。
なお、図10(B)において、斜線を施した部分は各記憶領域141〜143にデータが記憶されている(validである。)ことを示し、データが記憶されている記憶領域は書き換え不可であり、新たなデータの書き込みはできない。これは、図10(E)の映像フレームバッファ15の場合も同様である。
一方、映像デコーダ13側においてもデコードされた映像データの各フレームF1,F2,・・・は、図10(E)に示すように、順次、記憶領域151,152,・・・に記憶される。
ここで、音声データブロックB2及びこれと対応する映像データのフレームF2を例として説明する。音声デコーダ12によってデコード処理後の音声データブロックB2は、記憶領域142に記憶される。そして、その記憶領域142の音声データブロックB2が図10(C)に示すように、音声再生部16の音声再生用バッファに転送されると(ステップS101)、そのタイミングで映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)がなされる(ステップS102)。
これにより、映像再生部17では、図10(D)及び図10(E)に示すように、映像フレームバッファ15に記憶されているフレームF2を表示する(ステップS103)。図10における(ステップS101)、(ステップS102)、(ステップS103)は、図8のフローチャート中の(ステップS101)、(ステップS102)、(ステップS103)に対応している。
なお、映像データのフレームF2の表示期間が終了したあとは、フレームF2を記憶していた記憶領域152は解放される。また、音声再生部16側においては、音声データブロックB2を音声再生部16の音声再生用バッファ側に転送した段階で、音声データブロックB2を記憶していた記憶領域142は解放される。
このように、第3の映像再生同期信号生成方法は、映像データ1フレームの表示期間に相当する音声データのブロックが音声データバッファ14から音声再生部16が有する音声再生用バッファに転送されたタイミングで、映像データのフレーム更新を行うものである。映像再生部17では、この映像再生同期信号によって映像データのフレーム更新を行う。
具体的には、例えば、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz]であった場合には、映像データ1フレームの表示期間に対応する音声データの出力サンプル数(1470[sample])分の情報量を持つ音声データを1つのブロックとし、その音声データのブロックが音声再生部16の音声再生用バッファに転送されるタイミングで映像データのフレームの更新がなされる。これによって、映像と音声とを高精度に同期させることができる。
以上説明した第1〜第3の映像再生同期信号生成方法を採用することにより、音声データの再生処理に基づいて映像データのフレーム更新のタイミングを生成することができるので、音声データと映像データとの同期を高精度にとることができ、しかも、映像データのフレーム更新のタイミング生成用のタイマのリソースの用意及び管理が不要となる。
ところで、音声データのサンプリングレートと映像データのフレームレートとが整数比である場合には、音声データのサンプリングレートを映像データのフレームレートで割り算して得られた出力サンプル数を、単純に映像1フレームの表示期間に相当する音声データとすることができる。
すなわち、これまで説明した例では、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz](=44100[Hz])であり、これは、音声データのサンプリングレートと映像データのフレームレートとが整数比である場合であったが、各々の値によっては必ずしも整数比になるとは限らない。この場合、映像と音声とを長時間再生すると、後述するようなリップシンクのずれが生じて問題となりうる。
従って、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合についても考慮する必要がある。
以下、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合について説明する。
図11は、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合における音声データと映像データとの関係を説明する図である。図11の例では、映像データのフレームレートが29.97[frame/sec]、音声データのサンプリングレートが44.1[KHz]であるとする。この場合、図11からもわかるように、30フレームが出力される時間を計算すると、約1.001001[sec]となる。約1.001001秒間における音声データの出力サンプル数は44144.144144・・・となる。音声データのサンプリングレートと映像データのフレームレートとが整数比でないために、このような数値となるのである。
すなわち、映像データ1フレーム当りの音声データの出力サンプル数は、1471.471・・・となる。しかしながら、音声再生部16のD/A変換器161に与えられる音声データの出力サンプル数は、当然ながら正の整数である必要があるため、ここで計算されたような1471.471・・・という数値をD/A変換器161に与えることはできない。
そこで、仮に1471.471・・・について小数点以下切り上げを行って、「1472」、または、小数点以下切り捨てを行って「1471」とし、これら「1472」及び「1471」のいずれかに固定した値を上記した各方法における出力サンプル数として用いて同期再生を行うものとすると、映像データと音声データとのタイミングのわずかな誤差が徐々に累積していって、コンテンツを長時間再生したときのリップシンクのずれは許容できないものとなる。
この問題を解決するために、この例では、例えば1471[sample]あるいは1472[sample]の各値を適宜切り替えて用いて、長いスパンで平均したときに、映像データ1フレームの表示期間に相当する音声データの出力サンプル数がおおよそ1471.471・・・[sample]となるようにするなどの方法が考えられる。
ただし、その場合であっても、各音声データの出力サンプル数の変動が可能な限り小さく、つまり、フレーム更新周期のジッタが可能な限り小さくなるようにすることが好ましい。例えば、各音声データの出力サンプル数が「1」,「2942」,「1」,「2942」,「1」,「2942」,・・・というような極端な値で映像フレームの更新を行う場合も、平均の出力サンプル数としては、1471.471・・・に近い値となるが、これではフレーム更新周期のジッタが大きすぎて、視聴者に違和感を与えるものとなるばかりか、このようなタイミングで映像のフレームを切り替えることはハードウェア的に実現性に乏しい。
従って、長いスパンで平均したときの出力サンプル数の値が、理想の出力サンプル数となるように、かつ、フレーム更新周期のジッタができるだけ小さくなるように、映像データ1フレームの表示期間に相当する音声データの出力サンプル数を設定する方法が必要となる。
そのような出力サンプル数の設定方法として、ここでは2つの方法(これを第1の出力サンプル数設定方法及び第2の出力サンプル数設定方法という。)を用いるものとする。
第1の出力サンプル数設定方法は、ブレゼンハム(Bresenham)のアルゴリズムにより出力サンプル数を設定する方法であり、第2の出力サンプル数設定方法は、テーブル参照(LUT:Look Up Table)により出力サンプル数を設定する方法である。
まず、第1の出力サンプル数設定方法を用いて、映像データ1フレームの表示期間に相当する音声データの出力サンプル数を設定する方法について説明する。
1フレームの表示期間に相当する音声データの理想出力サンプル数Ni[sample/frame]は、
で表すことができる。(1)式において、fsは音声データのサンプリングレート[sample/sec]、Fはフレームレート[frame/sec]、kはkF及びkfsを整数にするための整数係数である。
ここで、
c=(kfs mod kF)/kF (2)
とおき、映像1フレームの表示期間に相当する音声データの出力処理ごとに、(2)式で得られた値をある実数の変数b(初期値0)に加算する。そして、加算の結果、この変数bの整数部が「+1」となったときだけ、次回出力する音声データの出力サンプル数Nを「+1」だけ加算することとする。
ここでは、映像データのフレームレートFをF=29.97[frame/sec]、音声データのサンプリングレートfsをfs=44.1[KHz]としているので、Ni=44100/29.97=1471.471471・・・[frame/sec]となるが、実際の出力時の出力サンプル数Nは、この1471.471471・・・に比較的近い整数とする必要がある。また、(2)式のcはc=0.471471と求められる。
図12は、映像の1フレームごとに上述のブレゼンハムのアルゴリズムを用いて各フレームに対応する出力サンプル数を求めた結果の一例を示す図である。図12からもわかるように、映像フレームのフレーム番号n==1,2,3,・・・に対応する音声データの出力サンプル数は、「1471」と「1472」のいずれかとなる。この例の場合、ある実数の変数b(初期値0)に0.471471を加算して得られる値(bn)の整数部が「+1」となった場合に、次に出力する音声データの出力サンプル数Nを「+1」だけ加算する。
図12の例では、フレーム番号2におけるbnの整数部が0で、フレーム番号3におけるbnの整数部が1であるので、次回(フレーム番号4)に対応する音声データの出力サンプル数も「1471+1」として「1472」の出力サンプル数とする。同様に、図12の例では、フレーム番号6、フレーム番号8、フレーム番号10にそれぞれ対応する音声データの出力サンプル数も「1472」となる。
このように、この例の場合、映像データの各フレームに対応する音声データの出力サンプル数は、「1471」又は「1472」がある確率で出現することとなる。なお、図12では11個のフレームに対する出力サンプル数しか示されていないが、長いスパンでみても同様の傾向となる。
従って、より長いスパンで平均したときに映像データの各フレームに対応する音声データの出力サンプル数は、理想の出力サンプル数である1471.471471・・・にきわめて近いものとなる。しかも、各フレームごとの出力サンプル数の変動はこの例の場合、「1」であり、これは、時間にしてほぼ22.7[μsec]である。このため、フレーム更新周期のジッタは約22.7[μsec]であり、これは、視聴者に違和感を与える要因とはならない。
以上説明したように、第1の出力サンプル数設定方法を用いることによって、フレーム更新周期のジッタをきわめて小さくできることができる。
なお、上述した例では、各フレームごとに音声データの出力サンプル数を設定するようにしたが、音声データの1サンプル分の時間は、約22.7[μsec](サンプリングレートが44.1[KHz]である場合)といったきわめて短い時間である。従って、映像データのすべてのフレームごとに出力サンプル数の設定を行わなくても、実用上十分なリップシンク品質が得られるものと考えられる。そこで、実用上十分なリップシンク品質を維持でき、かつ、映像データのフレーム更新周期のジッタが許容できる範囲であれば、上述した第1の出力サンプル数設定方法による出力サンプル数の調整は、複数フレームおきに行うようにしてもよい。
次に、第2の出力サンプル数設定方法について説明する。この第2の出力サンプル数設定方法はテーブル参照(LUT:Look Up Table)により出力サンプル数を設定する方法である。
フレームレートやサンプリングレートは一般に、何らかの規格の形式でそれぞれの値は予め決められている。例えば、フレームレートであれば、30[frame/sec]、29.97[frame/sec]、24[frame/sec]、15[frame/sec]、10[frame/sec]などであり、サンプリングレートであれば、8[KHz]、32[KHz]、44.1[KHz]、48[KHz]などである。このように、一般的に使用されているフレームレートやサンプリングレートは、それぞれ離散的な値である。
従って、フレームレートとサンプリングレート(及び量子化ビット数やチャネル数)との組み合わせによって、音声データの出力サンプル数やその調整の頻度(この頻度は、上述したように複数のフレームおきに出力サンプル数を調整するというようなことを意味している。)などのルールを事前に決めておき、それをテーブルとして持ち、これを利用することで第1の出力サンプル数設定方法と同様の効果を得ることができる。
図13は、フレームレートとサンプリングレートとに基づいて予め決められたルールの参照を可能とするテーブルの一例を示す図である。図13において、例えば、フレームレートが10[frame/sec](この図13では[fps]と表記)であって、サンプリングレートは8[KHz]である場合には、「ルール“10−8”」を参照し、フレームレートが15[frame/sec]であって、サンプリングレートは8[KHz]である場合には、「ルール“15−8”」を参照するというように、フレームレートとサンプリングレートとの組み合わせによって、参照すべきルールが記述されている。
一例として、フレームレートが29.97[frame/sec]であってサンプリングレートが44.1[KHz]である場合は、図13から「ルール“29.97−44.1”」というような参照すべきルールが記述されており、このルールに基づいて出力サンプル数の設定を行う。
この「ルール“29.97−44.1”」としては、種々の出力サンプル数の設定方法を設定することができるが、ここでは、以下に示す3つの出力サンプル数の設定ルールを例として説明する。
まず、出力サンプル数の設定ルール(その1)として、事前にブレゼンハムのアルゴリズムによって各フレームごとの出力サンプル数を求めておき、それを用いる。具体的な値は図12に示したとおりである。
また、出力サンプル数の設定ルール(その2)として、各フレームごとに1471[sample]と1472[sample]とを交互に繰り返す。そして、1000フレームに1回だけ1443[sample]とする。これは、出力サンプル数の設定ルール(その1)に比べれば映像フレーム更新周期のジッタは若干大きくなるが、少ない演算量で実現できる。
また、出力サンプル数の設定ルール(その3)として、1471[sample]を500回繰り返し、続いて、1472[sample]を499回繰り返す。続いて、1回だけ1443[sample]とする。この組み合わせを繰り返す。これは、出力サンプル数の設定ルール(その2)の変形であり、出力サンプル数の設定ルール(その2)と同様、出力サンプル数の設定ルール(その1)に比べればサンプリング更新周期のジッタは若干大きくなるが、少ない演算量で実現できる。
以上説明した第1の出力サンプル数設定方法又は第2の出力サンプル数設定方法によって求められた出力サンプル数を、上述の図6におけるステップS21、図7におけるステップS51、図8におけるステップS81で適用することで、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合であっても、高精度なリップシンクを長時間にわたって維持することができる。
すなわち、図6におけるステップS21においては、音声データの出力サンプル数の所定値設定を第1の出力サンプル数設定方法又は第2の出力サンプル数設定方法によって求められた出力サンプル数とし、図7におけるステップS51においては、音声データのフラグ位置を第1の出力サンプル数設定方法又は第2の出力サンプル数設定方法によって求められた出力サンプル数に対応する位置とする。また、図8におけるステップS81においては、転送すべき音声データブロックのブロックサイズを、第1の出力サンプル数設定方法又は第2の出力サンプル数設定方法によって求められた出力サンプル数から算出されるブロックサイズとする。このような設定を行うことで、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合であっても、高精度なリップシンクを長時間にわたって維持することができる。
なお、第2の出力サンプル数設定方法におけるテーブルは、フレームレートとサンプリングレートとが整数比であるか否かにかかわらず用いることもできる。
[実施形態2]
図14は、実施形態2に係る映像音声同期再生装置における映像再生同期信号生成方法の一例について説明する図である。
実施形態2に係る映像再生同期信号生成方法は、所定の出力サンプル数に相当する音声データブロックが音声データバッファ14から音声再生部16側に設けられた音声再生処理用としてのバッファに転送されたタイミングを、音声再生部16に対する出力処理終了タイミングとし、この出力処理終了タイミングで映像データのフレーム更新を行うものである。なお、音声再生処理用としてのバッファは、後に説明する図16の音声再生用バッファ164に相当するものである。
実施形態2に係る映像再生同期信号生成方法を実現するためには、音声データ用のバッファが2段設けられたバッファ構成とすることが好ましい。すなわち、音声デコーダ12によるデコード済みの音声データが書き込まれる音声データバッファ14(これは図2における音声データバッファ14に相当するものである。)と、音声再生部16側に設けられた音声再生用バッファ164との2段のバッファ構成とする。なお、音声再生用バッファ164は、図2においては図示されていない。このような2段のバッファ構成とすることによって、音声データを途切れることなく再生することができる。
なお、音声再生用バッファ164は、後に説明する図16に示すように、D/A変換器161の前段に設けられる。また、音声再生用バッファ164は、音声再生部16に新たに専用のバッファを設けて、それを音声再生用バッファ164として使用することも可能であるが、音声再生部16が音声再生用バッファとして使用可能な記憶手段をもともと有していればそれを利用することもできる。
また、音声データバッファ14に書き込まれた音声データブロックの音声再生用バッファ164への転送制御は、タイミング制御部18からの転送指示によって行われる。
ここで、図14に説明を戻すと、音声再生部16では、まず、音声再生用バッファ164の記憶領域(再生済みの音声データブロックを記憶していた記憶領域)を解放する(ステップS111)。この記憶領域の解放は、音声再生用バッファ164に書き込まれていた音声データのブロックがD/A変換器161に出力されるタイミングで行われる。
タイミング制御部18は、所定の出力サンプル数(映像データ1フレームの表示期間に相当する出力サンプル数)の音声データブロックを、音声データバッファ14から音声再生部16の音声再生用バッファ164に転送し、転送済みの音声データブロックを記憶していた記憶領域を解放する(ステップS121)。そして、タイミング制御部18は、この音声データブロックの音声再生部16への転送のタイミングを、映像データ1フレームの表示期間に相当する音声データブロックの出力処理終了タイミングとし、その出力処理終了タイミングごとに、映像再生同期信号を生成し、映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)を行い(ステップS122)、ステップS121に戻る。
また、音声再生部16は、音声データバッファ14から転送されてきた音声データブロックを音声再生用バッファ164に取得して、音声再生を行い(ステップS113)、ステップS111に戻る。
映像再生部17では、タイミング制御部18からの映像表示呼び出し(映像再生同期信号)を受けると、図6の場合と同様に、ステップS41で取得しておいた映像フレームを表示したのち、表示済みの映像フレームを記憶していた映像フレームバッファ15(図5参照。)の記憶領域を解放する(ステップS42,S43)。
以上説明したように、実施形態2に係る映像再生同期信号生成方法は、映像データ1フレームの表示期間に相当する音声データブロックが音声データバッファ14から音声再生部16の音声再生用バッファ164に転送されたタイミングで映像再生同期信号を出力し、この映像再生同期信号によって映像データのフレーム更新を行うものである。
具体的には、例えば、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz]であった場合、映像データ1フレームに対応する音声データの出力サンプル数(1470[sample])を1つの音声データブロックとし、その音声データブロックが音声再生部16の音声再生用バッファ164に転送されるタイミングで映像データのフレームの更新がなされる。これによって、映像と音声とを高精度に同期再生させることができる。
以上説明したように、実施形態2に係る映像再生同期信号生成方法を採用することにより、音声データの再生処理に基づいて映像データのフレーム更新のタイミングを生成することができるので、音声データと映像データとの同期を高精度にとることができ、しかも、映像データのフレーム更新のタイミング生成用のタイマのリソースの用意及び管理が不要となる。
実施形態2に係る映像音声同期再生方法は、図14に示すような映像音声同期再生を、ノン・プリエンプティブなマルチタスクOSを用いて可能とするものである。すなわち、実施形態2に係る映像音声同期再生方法は、映像データ1フレームの表示期間に相当する音声データブロックの音声再生部16に対する出力処理終了タイミングを、ノン・プリエンプティブなマルチタスクOSを用いて、マルチタスクOSのタスクスケジューリングの周期よりも精細なタイミングで取得するものである。
図15は、ノン・プリエンプティブなマルチタスクOSを用いて、音声出力を利用して精細なタスクスケジューリング周期を得る方法について説明する図である。
図15においては、複数のタスクA,B,Cがあって、タスクAは映像データ1フレーム分に相当する音声データブロックをカーネル側の音声データバッファ14から音声再生部16側の音声再生用バッファ164に書き込む処理(転送処理)と、映像データのフレーム更新処理のための映像再生同期信号の生成及び出力が可能なタスクである。
タスクAは自身に割り当てられた時間内のあるタイミングt1で、カーネル側の音声データバッファ14に書き込まれている音声データブロックを音声再生部16側の音声再生用バッファ164に転送するための「write()」のシステムコールを発行する。この「write()」のシステムコールをマルチタスクOSが受け取ると、カーネルが動作して「write()」の期間(図15の矢印で示す。)で音声データブロックをカーネル側の音声データバッファ14から音声再生部16側の音声再生用バッファ164に転送処理する。この間、カーネルはマルチタスクOSのブロッキングモードで動作を行うので、タスクAは「write()」が終わるまで、すなわち、ブロッキング状態から復帰するまで待つ。
そして、カーネルが音声データブロックの転送処理を終了すると、その転送処理終了のタイミングt2でブロッキング状態から復帰する。そして、ブロッキングから復帰すると同時に、タスクAは「フレーム更新処理()」を行う。
なお、「write()」のシステムコール終了のタイミングとフレーム更新のための映像同期再生信号出力のタイミングとは一致している。すなわち、図14で説明したように、実施形態2では、映像データ1フレームの表示期間に相当する音声データブロックが音声再生部16の音声再生用バッファ164に転送されたときを映像再生同期信号の出力タイミングとしている。
ところで、タスクAからマルチタスクOSに対して与えた「write()」のシステムコールをカーネルがブロッキングモードで処理中であれば、そのシステムコールはカーネル空間で処理されているため、「write()」の処理が終了するまでは、他のタスク(図15の例ではタスクBやタスクC)に切り替わることはない。
このように、マルチタスクOSのブロッキングモードを利用することで、「write()」のシステムコールが終了したタイミングを所望とするタイミングとすることができる。これによって、ノン・プリエンプティブなマルチタスクOSを用いて、そのOSのタスクスケジューリング周期よりも精細なタイミングを取得することができ、取得したタイミングを、映像データのフレーム更新処理を行うためのタイミングとして用いることができる。
図16は、実施形態2に係る映像音声同期再生装置をノン・プリエンプティブなマルチタスクOSを用いて処理させる場合を概念的に示す図である。PC(Personal Computer)には、音声再生部としてサウンドカードが、映像再生部としてグラフィックカードがそれぞれ設けられているものとする。もちろん、チップセット内蔵の機能が利用できるのであればそれでも構わない。このハードウェア上で、Linux(登録商標)などのUNIX(登録商標)系OSが動作しており、同OS上に各種デコーダやデマルチプレクサがユーザ空間上のソフトウェアとして実装されている。音声データバッファ14はRAMに、映像フレームバッファ15はRAMないしグラフィックカードのVRAM上に構成されている。なお、ここでは音声デコーダ、映像デコーダ及びデマルチプレクサなどの各部の動作の詳細については特に説明しないが、再生時は音声データバッファ及び映像フレームバッファがオーバラン/アンダランすることのないようにそれぞれ非同期で動作しているものとする。
映像と音声の再生がユーザ空間で開始されると、まずシステムデータより得られる音声データのサンプリングレートをサウンドカードのクロックとしてセットするため、各種デバイスの機能をコントロールするシステムコールである「ioctl()」を発行する。
カーネル空間ではそのシステムコールにより、デバイスドライバを介してサウンドカード(音声再生部16)のクロックジェネレータ162に音声データのサンプリングレートと同一のクロックを設定する。これによって、サウンドカード(音声再生部16)側では、音声再生用バッファ164に書き込まれている音声データブロック(映像データ1フレームの表示期間に相当する音声データ)をD/A変換器161にてD/A変換したのち、ローパスフィルタ163を通して音声信号として出力することができる。
そして、ユーザ空間上ではデコードされた音声データブロック(映像の1フレームの表示期間に相当する音声データ)を、「write()」のシステムコールを発行してサウンドカード側に出力する。ただし、システムコールを処理するカーネル側では、カーネル側の音声データバッファ14(カーネルが各種デバイスとのI/Oに利用するための記憶領域であって、以下ではカーネルバッファ14という。)に一旦データを書き込む。カーネルバッファ14が一杯にならないとサウンドカード側へのデータの出力はされないので、データブロックのサイズに応じて事前にカーネルバッファ14のサイズを小さくするなど適宜設定しておくのが好ましい。こうすることで、「write()」のシステムコールが発行されるたびに、カーネルは与えられたデータブロックをサウンドカード側へ出力するようになる。
なお、カーネルバッファ14から音声再生用バッファ164へのデータの書き込み(転送)は、音声再生用バッファ164に空き領域がない限り行えない。また、「write()」のシステムコールをブロッキングモードで動作させることで、ユーザ空間におけるプロセスはブロッキング状態となり、「write()」のシステムコールの後に続く処理は、カーネルによってブロッキングされる。
ここで、音声再生部16において、音声再生用バッファ164に書き込まれた音声データブロックがD/A変換器161に出力されると、音声再生用バッファ164には1つの音声データブロック(映像データ1フレームの表示期間に相当する音声データ)分の空き領域ができる。音声再生用バッファ164に映像データ1フレームの表示期間に相当する音声データブロック分の空き領域ができると、カーネルバッファ14に書き込まれた音声データブロックを音声再生用バッファ164に転送することができる。
すなわち、「write()」のシステムコールの後に続く処理がカーネルによってブロッキングされたあと、音声再生用バッファ164にすでに書き込まれている音声データブロックがD/A変換器161に出力されると、すなわち、所定の数の音声データサンプルがD/A変換器161に出力されると(ステップS131)、音声再生用バッファ164には映像データ1フレームの表示期間に相当する音声データブロック分の書き込み可能な領域ができる(ステップS132)。
音声再生用バッファ164に映像データ1フレームの表示期間に相当する音声データブロック分の空き領域ができると、カーネルバッファ14に書き込まれた音声データブロックが音声再生用バッファ164に転送され(ステップS133)、この音声データブロックの転送が終了すると、「write()」のシステムコールが終了する(ステップS134)。
このように、カーネルバッファ14から音声再生用バッファ164に音声データブロックが転送されると、「write()」のシステムコールが終了するので、その時点でカーネルによるブロッキングが解除され(ステップS135)、次のステップである映像データのフレーム更新処理に移る(これが映像再生同期信号となる。)。このタイミングでバッファフリップやビットブリットを行うことによって実際にフレーム更新がなされる。
このような動作を繰り返すことによって、映像データ1フレームの表示期間に相当する音声データのブロックがD/A変換器161に出力されるごとに映像再生同期信号を映像再生部17に出力することができる。すなわちこの手法では、システムコールをブロッキングモードで発行したときのカーネルの動作を利用して、ノン・プリエンプティブなマルチタスクOSを用いて、マルチタスクOSのタスクスケジューリング周期よりも精細なタイミングを取得することができ、そのタイミングを映像データのフレーム更新を行うための映像同期再生信号出力タイミングとして用いることができる。
なお、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合については、この実施形態2に係る映像音声同期再生方法においても、実施形態1に係る映像音声同期再生方法の場合と同様な方法を用いて対処することができる。
以上、本発明の映像再生同期信号生成方法及び映像音声同期再生方法を上述の各実施形態に基づいて説明したが、本発明は上述の各実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲で種々変形実施可能となるものである。
また、本発明は、上述の各実施形態1に係る映像再生同期信号生成方法や映像音声同期再生方法に限られず、これら映像再生同期信号生成方法や映像音声同期再生方法を実施する際に用いるタイミング制御装置や映像音声同期再生装置をも含むものである。また、上記したタイミング制御装置に映像再生同期信号生成方法を実行させる手順を有する映像再生同期信号生成プログラムや上記した映像音声同期再生装置に映像音声同期再生方法を実行させる手順を有する映像音声同期再生プログラムをも含むものである。この場合、これらの映像再生同期信号生成プログラムや映像音声同期再生プログラムは、フレキシブルディスク、光ディスク、ハードディスクなどの記録媒体に記録させておくこともできる。従って、本発明は、これらのプログラムが記録された記録媒体をも含むものである。もちろん、本発明は、ネットワークを介して供給可能なプログラムをも含むものである。
[実施形態1]
図1は、本発明の基本的な概念について説明するための図である。
本発明の映像再生同期信号生成方法においては、図1に示すように、映像データ1フレームの表示期間に相当するPCM(Pulse Code Modulation)音声データ(本発明の「1フレーム相当音声データ」に対応。)が音声再生部に出力処理されたタイミング(これを出力処理終了タイミングという。)で、映像データのフレーム更新を行うための映像再生同期信号を出力することとしている。なお、音声再生部16に対する出力処理終了タイミングというのは、実施形態1においては、音声再生部16に設けられるD/A変換器161に対する音声データの出力処理終了タイミングとしている。
具体的な例で説明すると、映像データのフレームレートが30[frame/sec]、PCM音声データ(以下では単に音声データという。)のサンプリングレートが44.1[KHz]であったとする。この場合、音声データのサンプリングレートを映像データのフレームレートで割り算して得られた1470[sample]を音声データの1つのブロックとし、その1470[sample]の音声データのブロックがD/A変換器161に出力されるタイミングで映像データのフレーム更新を行うための映像再生同期信号を出力する。そして、映像再生部17(図2参照。)側では、この映像再生同期信号を用いてフレーム更新を行うようにする。
これによって、音声再生用タイマのリソースのみを基準にして映像再生同期信号を生成することが可能となる。このため、映像再生部17側では、この映像再生同期信号を用いてフレーム更新を行うようにしているので、高精度なリップシンクが可能となり、また、タイマのリソースは音声再生側のみに用意すればよいことから、タイマのリソースの管理を容易なものとすることができる。
図2は、本発明の映像音声同期再生装置の機能を概略的に説明する図である。映像音声同期再生装置は、映像・音声多重化ストリームデータから音声ストリームデータADと映像ストリームデータVDとシステムデータSDとに分離する機能を有するデマルチプレクサ11、音声ストリームデータADをデコードする音声デコーダ12、映像ストリームデータVDをデコードする映像デコーダ13、デコード後の音声データを記憶する音声データバッファ14、デコード後の映像データをフレーム単位で記憶する映像フレームバッファ15、音声データバッファ14に記憶された音声データを順次入力して再生する音声再生部16、映像フレームバッファ15に記憶された映像データを順次入力して再生する映像再生部17、音声と映像とを同期させるためのタイミング制御を行うタイミング制御部18、音声再生部16で音声再生処理された音声信号を音声として出力する音声出力部19及び映像再生部17で映像再生処理された映像信号を映像として出力する映像出力部20を有している。
音声データバッファ14は、リングバッファなどのようなFIFOの機能を有するものである。なお、音声データはリニアPCM形式で音声データバッファ14に記憶される。また、映像フレームバッファ15は、例えば、3フレーム分の映像データをそれぞれのフレームごとに記憶可能な記憶領域151〜153を有している。
また、音声再生部16は、図1に示すように、D/A変換器161、クロックジェネレータ162、ローパスフィルタ(LPF)163を有しており、音声出力部19に接続されている。
タイミング制御部18は、デマルチプレクサ11からのシステムデータSD(サンプリングレートやフレームレートなど。)及び音声再生部16のクロックジェネレータ162からのクロックに基づいて、映像1フレームの表示期間に相当する音声データの出力サンプル数の設定を行う機能を有している。また、タイミング制御部18は、映像データ1フレームの表示期間に相当する音声データのD/A変換器161に対する出力処理終了タイミング(この出力処理終了タイミングについては後述する。)を取得して、出力処理終了タイミングを取得するごとに映像再生同期信号を生成し、その映像再生同期信号を映像再生部17に出力する機能を有している。このタイミング制御部18の具体的な動作については後述する。
また、映像再生部17は、映像再生同期信号によって映像出力部20に対してフレーム更新のための信号を出力する。
図3は、実施形態1に係る映像音声同期再生装置の動作概念を説明する図である。タスクスイッチャTSWは、簡単なタスクスケジューリング機能を有するもので、この図3の例では、デマルチプレクサ11、音声デコーダ12及び映像デコーダ13の動作切り替えを行う。例えば、音声デコーダ12に動作の権利を与えれば、音声デコーダ12による音声データの音声データバッファ14への書き込み動作が可能となり、映像デコーダ13に動作権利を与えれば、映像データの映像フレームバッファ15への書き込み動作が可能となる。
音声データバッファ14に書き込まれた音声データのうち、映像データ1フレームの表示期間に相当する音声データの音声再生処理がなされると、映像再生制御VOCに処理が移り、映像フレームの更新がなされ、映像フレームバッファ15に書き込まれている1フレーム分の映像データに対する映像再生処理がなされる。
図4は、音声デコーダ12の処理手順を説明するフローチャートである。図5は、映像デコーダ13の処理手順を説明するフローチャートである。
音声デコーダ12は、図4に示すように、まず、音声ストリームデータADがあるか否かを判定し(ステップS1)、音声ストリームデータADがなければ処理をタスクスイッチャTSW(図4及び図5では「TaskSW」と表記する。)に返し(ステップS2)、音声ストリームデータADがあれば音声データバッファ14に空き領域があるか否かを判定する(ステップS3)。
この判定において、音声データバッファ14に空き領域がなければタスクスイッチャTSWに処理を返し(ステップS4)、音声データバッファ14に空き領域があればデコードを行い(ステップS5)、デコード後の音声データを音声データバッファ14に書き込む(ステップS6)。そして、タスクスイッチャTSWに処理を返す(ステップS7)。
なお、タスクスイッチャTSWに処理を返すということは、タスク処理の権利を自分以外(この例では、デマルチプレクサ11又は映像デコーダ13。)に渡すということである。すなわち、図4の場合は、タスクスイッチャTSWによって、音声デコーダ12からデマルチプレクサ11ないし映像デコーダ13に処理を切り替えられることである。また、図4において、タスクスイッチャTSWから戻る矢印は、タスク処理の権利が自身に移ることを意味している。これは、図5においても同様である。
一方、映像デコーダ13は、図5に示すように、まず、映像ストリームデータVDがあるか否かを判定し(ステップS11)、映像ストリームデータVDがなければタスクスイッチャTSWに処理を返し(ステップS12)、映像ストリームデータVDがあれば映像フレームバッファ15に空き領域があるか否かを判定する(ステップS13)。
この判定において、映像フレームバッファ15に空き領域がなければタスクスイッチャTSWに処理を返し(ステップS14)、映像フレームバッファ15に空き領域があればデコードを行い(ステップS15)、デコード後のフレームを映像フレームバッファ15の空き領域に書き込む(ステップS16)。そして、タスクスイッチャTSWに処理を返す(ステップS17)。
なお、映像データの映像フレームバッファ15への書き込みは、図5におけるステップS16の書き込み動作例として示すように、例えば、映像データの各フレームをフレームF1,F2,F3,・・・で表せば、フレームF1をまず空きの記憶領域(この場合、初期状態として3つの記憶領域151〜153はすべて空き領域であるとする。)151に書き込み、次に、フレームF2を記憶領域152に書き込み、次にフレームF3を記憶領域153に書き込むというように記憶領域151〜153に順番に書き込む。
そして、記憶領域151〜153に書き込まれた映像データは、フレームF1,フレームF2,・・・の順序で順次出力されるので、記憶領域151,152,・・・の順序で空き領域となる。従って、フレームF4は記憶領域151に、フレームF5は記憶領域152に書き込むというような順序で記憶領域151〜153に順番に書き込まれる。
図6〜図8は、音声再生部16の音声再生処理に基づく映像再生同期信号生成方法について説明する図である。なお、図6に示す方法を第1の映像再生同期信号生成方法といい、図7に示す方法を第2の映像再生同期信号生成方法といい、図8に示す方法を第3の映像再生同期信号生成方法ということにする。
まず、第1の映像再生同期信号生成方法について、図6を参照しながら説明する。
図6において、タイミング制御部18では、音声データの出力サンプル数を所定値に設定する。(ステップS21)。この所定値は、映像データ1フレームに対応する音声データ(1フレーム相当音声データ)の出力サンプル数である。
そして、音声再生部16では、D/A変換器161に対して音声データサンプルを出力し(ステップS31)、出力済みのサンプル数(これを出力サンプル数という。)がタイミング制御部18で設定された所定値に達したか否かを判定する(ステップS32)。この判定の結果、出力サンプル数のカウント値が所定値に達したと判定すれば、所定値に達したことを示す信号をタイミング制御部18に出力する。
タイミング制御部18は、音声再生部16から出力サンプル数が所定値に達したことを示す信号を受けると映像再生同期信号を生成し、映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)を行い(ステップS22)、ステップS21に戻る。
このように、タイミング制御部18では、音声再生部16において、D/A変換器161に対して所定の出力サンプル数が出力されたタイミングを、映像データ1フレームの表示期間に相当する音声データの出力処理終了タイミングとして取得し、その出力処理終了タイミングを取得するごとに映像再生同期信号を生成して、その映像再生同期信号を映像再生部17に出力する。
映像再生部17では、タイミング制御部18からの映像表示呼び出し(映像再生同期信号)を受けると、ステップS41で取得しておいた映像フレームを表示したのち、表示済みの映像フレームを記憶していた映像フレームバッファ15のある1つの記憶領域を解放する(ステップS42,S43)。
なお、音声デコーダ12と音声再生部16との間及び映像デコーダ13と映像再生部17との間はいずれも非同期で動作しているものとする。ただし、音声デコーダ12及び映像デコーダ13は、音声データバッファ14及び映像フレームバッファ15でそれぞれバッファアンダラン/オーバランが起きないように制御されている。これは、以下に示す図7及び図8においても同様である。
このように、第1の映像再生同期信号生成方法は、D/A変換器161に出力される音声データの出力サンプル数が予め設定された値となるごとに、映像再生部17に対して映像再生同期信号を出力するものである。映像再生部17では、この映像再生同期信号によって映像データのフレーム更新を行う。
具体的には、例えば、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz]であった場合には、映像データ1フレームの表示期間に対応する音声データの出力サンプル数(1470[sample])が音声再生部16のD/A変換器161に出力されるごとに、映像データのフレームの更新がなされる。これによって、映像と音声とを高精度に同期させることができる。
このように、第1の映像再生同期信号生成方法によれば、D/A変換器161に出力される音声データの出力サンプル数をカウントし、そのカウント数が予め設定された値となったタイミングで映像データのフレーム更新を行うようにしているので、映像と音声との同期再生が自動的に実現されることとなる。
次に、第2の映像再生同期信号生成方法について、図7を参照しながら説明する。
図7において、タイミング制御部18は、映像データ1フレームの表示期間に相当する音声データの終端位置にフラグを立てる(ステップS51)。具体的には、音声データ中の音声に直接影響の無い特定のビットに終端であることを示すフラグを立てるなどをする。そして、音声再生部16では、D/A変換器161に対して音声データサンプルを出力し(ステップS61)、タイミング制御部18で立てられたフラグを検出したか否かを判定する(ステップS62)。この判定の結果、フラグを検出したと判定すれば、フラグを検出したことを示す信号をタイミング制御部18に出力する。
タイミング制御部18は、音声再生部16からフラグを検出したことを示す信号を受けると、映像再生同期信号を生成し、映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)を行い(ステップS52)、ステップS51に戻る。
このように、タイミング制御部18では、音声再生部16において、D/A変換器161に対して出力される音声データからフラグが検出されたタイミングを、映像データ1フレームの表示期間に相当する音声データの出力処理終了タイミングとして取得し、その出力処理終了タイミングを取得するごとに映像再生同期信号を生成し、その映像再生同期信号を映像再生部17に出力する。
映像再生部17では、音声再生部16からの映像表示呼び出し(映像再生同期信号)を受けると、図6の場合と同様、ステップS41で取得しておいた映像フレームを表示したのち、表示済みの映像フレームを記憶していた映像フレームバッファ15のある1つの記憶領域を解放する(ステップS42,S43)。
第2の映像再生同期信号生成方法は、映像1フレームの表示期間に相当する音声データから終端を示すフラグを検出すると、映像再生部17に対して映像再生同期信号を出力するものである。映像再生部17では、この映像再生同期信号によって映像データのフレーム更新を行う。
具体的には、例えば、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz]であった場合には、映像データ1フレームの表示期間に相当する出力サンプル数(1470[sample])ごとに、音声データの終端を示すフラグを立てる。そして、その終端を示すフラグが検出されるごとに、映像データのフレームの更新がなされる。これによって、映像と音声とを高精度に同期させることができる。
第2の映像再生同期信号生成方法によれば、出力サンプル数をカウントすることなく音声データの所定のデータ単位を検出することができる。これは、「番兵のアルゴリズム」などを用いることによって実現できる。
次に、第3の映像再生同期信号生成方法について、図8を参照しながら説明する。
第3の映像再生同期信号生成方法は、図8に示すように、所定の出力サンプル数に相当する音声データのブロック(以下、音声データブロックという。)が音声データバッファ14から音声再生部16の音声再生用のバッファに転送されたタイミングで映像データのフレーム更新を行うものである。
第3の映像生成タイミングの生成方法を実現するために、音声データ用のバッファが2段設けられるようなバッファ構成とすることが好ましい。すなわち、音声デコーダ12によるデコード済みの音声データを記憶するための音声データバッファ14と、音声再生部16側に設けられる音声再生用バッファ(図示せず。)との2段のバッファ構成とする。このような2段のバッファ構成とすることによって、音声データを途切れることなく再生することができる。
なお、音声再生用バッファは、D/A変換器161の前段に設けられる。また、この音声再生用バッファは、音声再生部16に専用のバッファとして設けることも可能であるが、音声再生部16が音声再生用バッファとして使用可能な記憶手段をもともと有していればそれを利用することもできる。
第3の映像再生同期信号生成方法を実現する際には、音声データバッファ14は、複数の記憶領域を有するものとし、それぞれの記憶領域に音声データブロックを個々のブロック単位で書き込むことができるようなものであることが好ましい。従って、この場合、音声データバッファ14は、映像フレームバッファ15と同様、例えば、3つの記憶領域141〜143(図9参照。)を有しているものであるとする。
図9は、第3の映像再生同期信号生成方法における音声データブロックの音声データバッファ14への書き込みを示す図である。この音声データブロックの音声データバッファ14への書き込みは、音声デコーダ12によって行われる。その書き込み動作は、映像データの各フレームを映像フレームバッファ15の各記憶領域151〜153へ書き込むのと同様の動作で可能となる。
例えば、図9に示すように、音声データの各音声データブロックを音声データブロックB1,B2,B3,・・・で表せば、音声データブロックB1をまず空きの記憶領域(この場合、初期状態として3つの記憶領域141〜143はすべて空き領域であるとする。)141に書き込み、次に、音声データブロックB2を空きの記憶領域142に書き込み、次に、音声データブロックB3を空きの記憶領域143に書き込むというように順次記憶領域141〜143に書き込む。また、各記憶領域141〜143に書き込まれた音声データブロックB1〜B3の音声再生用バッファへの転送制御は、タイミング制御部18からの転送指示によって行われる。
ここで、図8に説明を戻すと、音声再生部16では、まず、自身が有する音声再生用バッファの記憶領域のうち、再生済みの音声データの1ブロックを記憶していた記憶領域を解放する(ステップS71)。この記憶領域の解放は、音声再生用バッファに書き込まれていた音声データブロックがD/A変換器161に出力されたタイミングで行われる。
タイミング制御部18は、所定の出力サンプル数(映像データ1フレームの表示期間に相当する出力サンプル数)の音声データブロックを、音声データバッファ14から音声再生部16に転送し、転送済みの音声データブロックを記憶していた記憶領域を解放する(ステップS81)。そして、タイミング制御部18は、この音声データブロックの音声再生部16への転送のタイミングを、映像データ1フレームの表示期間に相当する音声データブロックの出力処理終了タイミングとし、その出力処理終了タイミングごとに、映像再生同期信号を生成し、映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)を行い(ステップS82)、ステップS81に戻る。
また、音声再生部16は、音声データバッファ14から転送されてきた音声データブロックを取得して自身の音声再生用バッファに記憶し(ステップS72)、音声再生を行い(ステップS73)、ステップS71に戻る。
映像再生部17では、タイミング制御部18からの映像表示呼び出し(映像再生同期信号)を受けると、図6の場合と同様、ステップS41で取得しておいた映像フレームを表示したのち、表示済みの映像フレームを記憶していた映像フレームバッファ15のある1つの記憶領域を解放する(ステップS42,S43)。
図10は、第3の映像再生同期信号生成方法を用いた場合の音声及び映像の再生動作例を説明するための図である。図10の横軸は時間を示している。図10(A)は音声デコーダ12の音声デコード処理タスクを示す図であり、図10(F)は映像デコーダ13の映像デコード処理タスクを示す図であり、これらはタスクスイッチャTSWによってそれぞれの動作が切り替えられ、CPUによって割り当てられた時間内でデコード処理を行う。なお、デマルチプレクシング処理のタスクについては、必要な処理時間は映像デコード処理タスクや音声デコード処理タスクよりも短いのが一般的であるため、図10には特に記していない。
また、図10(B)は音声データバッファ14における3つの記憶領域141〜143の記憶状態を示す図であり、音声デコーダ12でデコードされた音声データブロックB1が記憶領域141に記憶され、音声デコーダ12でデコードされた音声データブロックB2が記憶領域142に記憶されるというように、順次、デコードされた音声データブロックB1,B2,・・・がそれぞれ記憶領域141,142,・・・に記憶される。
なお、図10(B)において、斜線を施した部分は各記憶領域141〜143にデータが記憶されている(validである。)ことを示し、データが記憶されている記憶領域は書き換え不可であり、新たなデータの書き込みはできない。これは、図10(E)の映像フレームバッファ15の場合も同様である。
一方、映像デコーダ13側においてもデコードされた映像データの各フレームF1,F2,・・・は、図10(E)に示すように、順次、記憶領域151,152,・・・に記憶される。
ここで、音声データブロックB2及びこれと対応する映像データのフレームF2を例として説明する。音声デコーダ12によってデコード処理後の音声データブロックB2は、記憶領域142に記憶される。そして、その記憶領域142の音声データブロックB2が図10(C)に示すように、音声再生部16の音声再生用バッファに転送されると(ステップS101)、そのタイミングで映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)がなされる(ステップS102)。
これにより、映像再生部17では、図10(D)及び図10(E)に示すように、映像フレームバッファ15に記憶されているフレームF2を表示する(ステップS103)。図10における(ステップS101)、(ステップS102)、(ステップS103)は、図8のフローチャート中の(ステップS101)、(ステップS102)、(ステップS103)に対応している。
なお、映像データのフレームF2の表示期間が終了したあとは、フレームF2を記憶していた記憶領域152は解放される。また、音声再生部16側においては、音声データブロックB2を音声再生部16の音声再生用バッファ側に転送した段階で、音声データブロックB2を記憶していた記憶領域142は解放される。
このように、第3の映像再生同期信号生成方法は、映像データ1フレームの表示期間に相当する音声データのブロックが音声データバッファ14から音声再生部16が有する音声再生用バッファに転送されたタイミングで、映像データのフレーム更新を行うものである。映像再生部17では、この映像再生同期信号によって映像データのフレーム更新を行う。
具体的には、例えば、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz]であった場合には、映像データ1フレームの表示期間に対応する音声データの出力サンプル数(1470[sample])分の情報量を持つ音声データを1つのブロックとし、その音声データのブロックが音声再生部16の音声再生用バッファに転送されるタイミングで映像データのフレームの更新がなされる。これによって、映像と音声とを高精度に同期させることができる。
以上説明した第1〜第3の映像再生同期信号生成方法を採用することにより、音声データの再生処理に基づいて映像データのフレーム更新のタイミングを生成することができるので、音声データと映像データとの同期を高精度にとることができ、しかも、映像データのフレーム更新のタイミング生成用のタイマのリソースの用意及び管理が不要となる。
ところで、音声データのサンプリングレートと映像データのフレームレートとが整数比である場合には、音声データのサンプリングレートを映像データのフレームレートで割り算して得られた出力サンプル数を、単純に映像1フレームの表示期間に相当する音声データとすることができる。
すなわち、これまで説明した例では、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz](=44100[Hz])であり、これは、音声データのサンプリングレートと映像データのフレームレートとが整数比である場合であったが、各々の値によっては必ずしも整数比になるとは限らない。この場合、映像と音声とを長時間再生すると、後述するようなリップシンクのずれが生じて問題となりうる。
従って、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合についても考慮する必要がある。
以下、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合について説明する。
図11は、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合における音声データと映像データとの関係を説明する図である。図11の例では、映像データのフレームレートが29.97[frame/sec]、音声データのサンプリングレートが44.1[KHz]であるとする。この場合、図11からもわかるように、30フレームが出力される時間を計算すると、約1.001001[sec]となる。約1.001001秒間における音声データの出力サンプル数は44144.144144・・・となる。音声データのサンプリングレートと映像データのフレームレートとが整数比でないために、このような数値となるのである。
すなわち、映像データ1フレーム当りの音声データの出力サンプル数は、1471.471・・・となる。しかしながら、音声再生部16のD/A変換器161に与えられる音声データの出力サンプル数は、当然ながら正の整数である必要があるため、ここで計算されたような1471.471・・・という数値をD/A変換器161に与えることはできない。
そこで、仮に1471.471・・・について小数点以下切り上げを行って、「1472」、または、小数点以下切り捨てを行って「1471」とし、これら「1472」及び「1471」のいずれかに固定した値を上記した各方法における出力サンプル数として用いて同期再生を行うものとすると、映像データと音声データとのタイミングのわずかな誤差が徐々に累積していって、コンテンツを長時間再生したときのリップシンクのずれは許容できないものとなる。
この問題を解決するために、この例では、例えば1471[sample]あるいは1472[sample]の各値を適宜切り替えて用いて、長いスパンで平均したときに、映像データ1フレームの表示期間に相当する音声データの出力サンプル数がおおよそ1471.471・・・[sample]となるようにするなどの方法が考えられる。
ただし、その場合であっても、各音声データの出力サンプル数の変動が可能な限り小さく、つまり、フレーム更新周期のジッタが可能な限り小さくなるようにすることが好ましい。例えば、各音声データの出力サンプル数が「1」,「2942」,「1」,「2942」,「1」,「2942」,・・・というような極端な値で映像フレームの更新を行う場合も、平均の出力サンプル数としては、1471.471・・・に近い値となるが、これではフレーム更新周期のジッタが大きすぎて、視聴者に違和感を与えるものとなるばかりか、このようなタイミングで映像のフレームを切り替えることはハードウェア的に実現性に乏しい。
従って、長いスパンで平均したときの出力サンプル数の値が、理想の出力サンプル数となるように、かつ、フレーム更新周期のジッタができるだけ小さくなるように、映像データ1フレームの表示期間に相当する音声データの出力サンプル数を設定する方法が必要となる。
そのような出力サンプル数の設定方法として、ここでは2つの方法(これを第1の出力サンプル数設定方法及び第2の出力サンプル数設定方法という。)を用いるものとする。
第1の出力サンプル数設定方法は、ブレゼンハム(Bresenham)のアルゴリズムにより出力サンプル数を設定する方法であり、第2の出力サンプル数設定方法は、テーブル参照(LUT:Look Up Table)により出力サンプル数を設定する方法である。
まず、第1の出力サンプル数設定方法を用いて、映像データ1フレームの表示期間に相当する音声データの出力サンプル数を設定する方法について説明する。
1フレームの表示期間に相当する音声データの理想出力サンプル数Ni[sample/frame]は、
で表すことができる。(1)式において、fsは音声データのサンプリングレート[sample/sec]、Fはフレームレート[frame/sec]、kはkF及びkfsを整数にするための整数係数である。
ここで、
c=(kfs mod kF)/kF (2)
とおき、映像1フレームの表示期間に相当する音声データの出力処理ごとに、(2)式で得られた値をある実数の変数b(初期値0)に加算する。そして、加算の結果、この変数bの整数部が「+1」となったときだけ、次回出力する音声データの出力サンプル数Nを「+1」だけ加算することとする。
ここでは、映像データのフレームレートFをF=29.97[frame/sec]、音声データのサンプリングレートfsをfs=44.1[KHz]としているので、Ni=44100/29.97=1471.471471・・・[frame/sec]となるが、実際の出力時の出力サンプル数Nは、この1471.471471・・・に比較的近い整数とする必要がある。また、(2)式のcはc=0.471471と求められる。
図12は、映像の1フレームごとに上述のブレゼンハムのアルゴリズムを用いて各フレームに対応する出力サンプル数を求めた結果の一例を示す図である。図12からもわかるように、映像フレームのフレーム番号n==1,2,3,・・・に対応する音声データの出力サンプル数は、「1471」と「1472」のいずれかとなる。この例の場合、ある実数の変数b(初期値0)に0.471471を加算して得られる値(bn)の整数部が「+1」となった場合に、次に出力する音声データの出力サンプル数Nを「+1」だけ加算する。
図12の例では、フレーム番号2におけるbnの整数部が0で、フレーム番号3におけるbnの整数部が1であるので、次回(フレーム番号4)に対応する音声データの出力サンプル数も「1471+1」として「1472」の出力サンプル数とする。同様に、図12の例では、フレーム番号6、フレーム番号8、フレーム番号10にそれぞれ対応する音声データの出力サンプル数も「1472」となる。
このように、この例の場合、映像データの各フレームに対応する音声データの出力サンプル数は、「1471」又は「1472」がある確率で出現することとなる。なお、図12では11個のフレームに対する出力サンプル数しか示されていないが、長いスパンでみても同様の傾向となる。
従って、より長いスパンで平均したときに映像データの各フレームに対応する音声データの出力サンプル数は、理想の出力サンプル数である1471.471471・・・にきわめて近いものとなる。しかも、各フレームごとの出力サンプル数の変動はこの例の場合、「1」であり、これは、時間にしてほぼ22.7[μsec]である。このため、フレーム更新周期のジッタは約22.7[μsec]であり、これは、視聴者に違和感を与える要因とはならない。
以上説明したように、第1の出力サンプル数設定方法を用いることによって、フレーム更新周期のジッタをきわめて小さくできることができる。
なお、上述した例では、各フレームごとに音声データの出力サンプル数を設定するようにしたが、音声データの1サンプル分の時間は、約22.7[μsec](サンプリングレートが44.1[KHz]である場合)といったきわめて短い時間である。従って、映像データのすべてのフレームごとに出力サンプル数の設定を行わなくても、実用上十分なリップシンク品質が得られるものと考えられる。そこで、実用上十分なリップシンク品質を維持でき、かつ、映像データのフレーム更新周期のジッタが許容できる範囲であれば、上述した第1の出力サンプル数設定方法による出力サンプル数の調整は、複数フレームおきに行うようにしてもよい。
次に、第2の出力サンプル数設定方法について説明する。この第2の出力サンプル数設定方法はテーブル参照(LUT:Look Up Table)により出力サンプル数を設定する方法である。
フレームレートやサンプリングレートは一般に、何らかの規格の形式でそれぞれの値は予め決められている。例えば、フレームレートであれば、30[frame/sec]、29.97[frame/sec]、24[frame/sec]、15[frame/sec]、10[frame/sec]などであり、サンプリングレートであれば、8[KHz]、32[KHz]、44.1[KHz]、48[KHz]などである。このように、一般的に使用されているフレームレートやサンプリングレートは、それぞれ離散的な値である。
従って、フレームレートとサンプリングレート(及び量子化ビット数やチャネル数)との組み合わせによって、音声データの出力サンプル数やその調整の頻度(この頻度は、上述したように複数のフレームおきに出力サンプル数を調整するというようなことを意味している。)などのルールを事前に決めておき、それをテーブルとして持ち、これを利用することで第1の出力サンプル数設定方法と同様の効果を得ることができる。
図13は、フレームレートとサンプリングレートとに基づいて予め決められたルールの参照を可能とするテーブルの一例を示す図である。図13において、例えば、フレームレートが10[frame/sec](この図13では[fps]と表記)であって、サンプリングレートは8[KHz]である場合には、「ルール“10−8”」を参照し、フレームレートが15[frame/sec]であって、サンプリングレートは8[KHz]である場合には、「ルール“15−8”」を参照するというように、フレームレートとサンプリングレートとの組み合わせによって、参照すべきルールが記述されている。
一例として、フレームレートが29.97[frame/sec]であってサンプリングレートが44.1[KHz]である場合は、図13から「ルール“29.97−44.1”」というような参照すべきルールが記述されており、このルールに基づいて出力サンプル数の設定を行う。
この「ルール“29.97−44.1”」としては、種々の出力サンプル数の設定方法を設定することができるが、ここでは、以下に示す3つの出力サンプル数の設定ルールを例として説明する。
まず、出力サンプル数の設定ルール(その1)として、事前にブレゼンハムのアルゴリズムによって各フレームごとの出力サンプル数を求めておき、それを用いる。具体的な値は図12に示したとおりである。
また、出力サンプル数の設定ルール(その2)として、各フレームごとに1471[sample]と1472[sample]とを交互に繰り返す。そして、1000フレームに1回だけ1443[sample]とする。これは、出力サンプル数の設定ルール(その1)に比べれば映像フレーム更新周期のジッタは若干大きくなるが、少ない演算量で実現できる。
また、出力サンプル数の設定ルール(その3)として、1471[sample]を500回繰り返し、続いて、1472[sample]を499回繰り返す。続いて、1回だけ1443[sample]とする。この組み合わせを繰り返す。これは、出力サンプル数の設定ルール(その2)の変形であり、出力サンプル数の設定ルール(その2)と同様、出力サンプル数の設定ルール(その1)に比べればサンプリング更新周期のジッタは若干大きくなるが、少ない演算量で実現できる。
以上説明した第1の出力サンプル数設定方法又は第2の出力サンプル数設定方法によって求められた出力サンプル数を、上述の図6におけるステップS21、図7におけるステップS51、図8におけるステップS81で適用することで、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合であっても、高精度なリップシンクを長時間にわたって維持することができる。
すなわち、図6におけるステップS21においては、音声データの出力サンプル数の所定値設定を第1の出力サンプル数設定方法又は第2の出力サンプル数設定方法によって求められた出力サンプル数とし、図7におけるステップS51においては、音声データのフラグ位置を第1の出力サンプル数設定方法又は第2の出力サンプル数設定方法によって求められた出力サンプル数に対応する位置とする。また、図8におけるステップS81においては、転送すべき音声データブロックのブロックサイズを、第1の出力サンプル数設定方法又は第2の出力サンプル数設定方法によって求められた出力サンプル数から算出されるブロックサイズとする。このような設定を行うことで、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合であっても、高精度なリップシンクを長時間にわたって維持することができる。
なお、第2の出力サンプル数設定方法におけるテーブルは、フレームレートとサンプリングレートとが整数比であるか否かにかかわらず用いることもできる。
[実施形態2]
図14は、実施形態2に係る映像音声同期再生装置における映像再生同期信号生成方法の一例について説明する図である。
実施形態2に係る映像再生同期信号生成方法は、所定の出力サンプル数に相当する音声データブロックが音声データバッファ14から音声再生部16側に設けられた音声再生処理用としてのバッファに転送されたタイミングを、音声再生部16に対する出力処理終了タイミングとし、この出力処理終了タイミングで映像データのフレーム更新を行うものである。なお、音声再生処理用としてのバッファは、後に説明する図16の音声再生用バッファ164に相当するものである。
実施形態2に係る映像再生同期信号生成方法を実現するためには、音声データ用のバッファが2段設けられたバッファ構成とすることが好ましい。すなわち、音声デコーダ12によるデコード済みの音声データが書き込まれる音声データバッファ14(これは図2における音声データバッファ14に相当するものである。)と、音声再生部16側に設けられた音声再生用バッファ164との2段のバッファ構成とする。なお、音声再生用バッファ164は、図2においては図示されていない。このような2段のバッファ構成とすることによって、音声データを途切れることなく再生することができる。
なお、音声再生用バッファ164は、後に説明する図16に示すように、D/A変換器161の前段に設けられる。また、音声再生用バッファ164は、音声再生部16に新たに専用のバッファを設けて、それを音声再生用バッファ164として使用することも可能であるが、音声再生部16が音声再生用バッファとして使用可能な記憶手段をもともと有していればそれを利用することもできる。
また、音声データバッファ14に書き込まれた音声データブロックの音声再生用バッファ164への転送制御は、タイミング制御部18からの転送指示によって行われる。
ここで、図14に説明を戻すと、音声再生部16では、まず、音声再生用バッファ164の記憶領域(再生済みの音声データブロックを記憶していた記憶領域)を解放する(ステップS111)。この記憶領域の解放は、音声再生用バッファ164に書き込まれていた音声データのブロックがD/A変換器161に出力されるタイミングで行われる。
タイミング制御部18は、所定の出力サンプル数(映像データ1フレームの表示期間に相当する出力サンプル数)の音声データブロックを、音声データバッファ14から音声再生部16の音声再生用バッファ164に転送し、転送済みの音声データブロックを記憶していた記憶領域を解放する(ステップS121)。そして、タイミング制御部18は、この音声データブロックの音声再生部16への転送のタイミングを、映像データ1フレームの表示期間に相当する音声データブロックの出力処理終了タイミングとし、その出力処理終了タイミングごとに、映像再生同期信号を生成し、映像再生部17に対して映像表示呼び出し(映像再生同期信号出力)を行い(ステップS122)、ステップS121に戻る。
また、音声再生部16は、音声データバッファ14から転送されてきた音声データブロックを音声再生用バッファ164に取得して、音声再生を行い(ステップS113)、ステップS111に戻る。
映像再生部17では、タイミング制御部18からの映像表示呼び出し(映像再生同期信号)を受けると、図6の場合と同様に、ステップS41で取得しておいた映像フレームを表示したのち、表示済みの映像フレームを記憶していた映像フレームバッファ15(図5参照。)の記憶領域を解放する(ステップS42,S43)。
以上説明したように、実施形態2に係る映像再生同期信号生成方法は、映像データ1フレームの表示期間に相当する音声データブロックが音声データバッファ14から音声再生部16の音声再生用バッファ164に転送されたタイミングで映像再生同期信号を出力し、この映像再生同期信号によって映像データのフレーム更新を行うものである。
具体的には、例えば、映像データのフレームレートが30[frame/sec]、音声データのサンプリングレートが44.1[KHz]であった場合、映像データ1フレームに対応する音声データの出力サンプル数(1470[sample])を1つの音声データブロックとし、その音声データブロックが音声再生部16の音声再生用バッファ164に転送されるタイミングで映像データのフレームの更新がなされる。これによって、映像と音声とを高精度に同期再生させることができる。
以上説明したように、実施形態2に係る映像再生同期信号生成方法を採用することにより、音声データの再生処理に基づいて映像データのフレーム更新のタイミングを生成することができるので、音声データと映像データとの同期を高精度にとることができ、しかも、映像データのフレーム更新のタイミング生成用のタイマのリソースの用意及び管理が不要となる。
実施形態2に係る映像音声同期再生方法は、図14に示すような映像音声同期再生を、ノン・プリエンプティブなマルチタスクOSを用いて可能とするものである。すなわち、実施形態2に係る映像音声同期再生方法は、映像データ1フレームの表示期間に相当する音声データブロックの音声再生部16に対する出力処理終了タイミングを、ノン・プリエンプティブなマルチタスクOSを用いて、マルチタスクOSのタスクスケジューリングの周期よりも精細なタイミングで取得するものである。
図15は、ノン・プリエンプティブなマルチタスクOSを用いて、音声出力を利用して精細なタスクスケジューリング周期を得る方法について説明する図である。
図15においては、複数のタスクA,B,Cがあって、タスクAは映像データ1フレーム分に相当する音声データブロックをカーネル側の音声データバッファ14から音声再生部16側の音声再生用バッファ164に書き込む処理(転送処理)と、映像データのフレーム更新処理のための映像再生同期信号の生成及び出力が可能なタスクである。
タスクAは自身に割り当てられた時間内のあるタイミングt1で、カーネル側の音声データバッファ14に書き込まれている音声データブロックを音声再生部16側の音声再生用バッファ164に転送するための「write()」のシステムコールを発行する。この「write()」のシステムコールをマルチタスクOSが受け取ると、カーネルが動作して「write()」の期間(図15の矢印で示す。)で音声データブロックをカーネル側の音声データバッファ14から音声再生部16側の音声再生用バッファ164に転送処理する。この間、カーネルはマルチタスクOSのブロッキングモードで動作を行うので、タスクAは「write()」が終わるまで、すなわち、ブロッキング状態から復帰するまで待つ。
そして、カーネルが音声データブロックの転送処理を終了すると、その転送処理終了のタイミングt2でブロッキング状態から復帰する。そして、ブロッキングから復帰すると同時に、タスクAは「フレーム更新処理()」を行う。
なお、「write()」のシステムコール終了のタイミングとフレーム更新のための映像同期再生信号出力のタイミングとは一致している。すなわち、図14で説明したように、実施形態2では、映像データ1フレームの表示期間に相当する音声データブロックが音声再生部16の音声再生用バッファ164に転送されたときを映像再生同期信号の出力タイミングとしている。
ところで、タスクAからマルチタスクOSに対して与えた「write()」のシステムコールをカーネルがブロッキングモードで処理中であれば、そのシステムコールはカーネル空間で処理されているため、「write()」の処理が終了するまでは、他のタスク(図15の例ではタスクBやタスクC)に切り替わることはない。
このように、マルチタスクOSのブロッキングモードを利用することで、「write()」のシステムコールが終了したタイミングを所望とするタイミングとすることができる。これによって、ノン・プリエンプティブなマルチタスクOSを用いて、そのOSのタスクスケジューリング周期よりも精細なタイミングを取得することができ、取得したタイミングを、映像データのフレーム更新処理を行うためのタイミングとして用いることができる。
図16は、実施形態2に係る映像音声同期再生装置をノン・プリエンプティブなマルチタスクOSを用いて処理させる場合を概念的に示す図である。PC(Personal Computer)には、音声再生部としてサウンドカードが、映像再生部としてグラフィックカードがそれぞれ設けられているものとする。もちろん、チップセット内蔵の機能が利用できるのであればそれでも構わない。このハードウェア上で、Linux(登録商標)などのUNIX(登録商標)系OSが動作しており、同OS上に各種デコーダやデマルチプレクサがユーザ空間上のソフトウェアとして実装されている。音声データバッファ14はRAMに、映像フレームバッファ15はRAMないしグラフィックカードのVRAM上に構成されている。なお、ここでは音声デコーダ、映像デコーダ及びデマルチプレクサなどの各部の動作の詳細については特に説明しないが、再生時は音声データバッファ及び映像フレームバッファがオーバラン/アンダランすることのないようにそれぞれ非同期で動作しているものとする。
映像と音声の再生がユーザ空間で開始されると、まずシステムデータより得られる音声データのサンプリングレートをサウンドカードのクロックとしてセットするため、各種デバイスの機能をコントロールするシステムコールである「ioctl()」を発行する。
カーネル空間ではそのシステムコールにより、デバイスドライバを介してサウンドカード(音声再生部16)のクロックジェネレータ162に音声データのサンプリングレートと同一のクロックを設定する。これによって、サウンドカード(音声再生部16)側では、音声再生用バッファ164に書き込まれている音声データブロック(映像データ1フレームの表示期間に相当する音声データ)をD/A変換器161にてD/A変換したのち、ローパスフィルタ163を通して音声信号として出力することができる。
そして、ユーザ空間上ではデコードされた音声データブロック(映像の1フレームの表示期間に相当する音声データ)を、「write()」のシステムコールを発行してサウンドカード側に出力する。ただし、システムコールを処理するカーネル側では、カーネル側の音声データバッファ14(カーネルが各種デバイスとのI/Oに利用するための記憶領域であって、以下ではカーネルバッファ14という。)に一旦データを書き込む。カーネルバッファ14が一杯にならないとサウンドカード側へのデータの出力はされないので、データブロックのサイズに応じて事前にカーネルバッファ14のサイズを小さくするなど適宜設定しておくのが好ましい。こうすることで、「write()」のシステムコールが発行されるたびに、カーネルは与えられたデータブロックをサウンドカード側へ出力するようになる。
なお、カーネルバッファ14から音声再生用バッファ164へのデータの書き込み(転送)は、音声再生用バッファ164に空き領域がない限り行えない。また、「write()」のシステムコールをブロッキングモードで動作させることで、ユーザ空間におけるプロセスはブロッキング状態となり、「write()」のシステムコールの後に続く処理は、カーネルによってブロッキングされる。
ここで、音声再生部16において、音声再生用バッファ164に書き込まれた音声データブロックがD/A変換器161に出力されると、音声再生用バッファ164には1つの音声データブロック(映像データ1フレームの表示期間に相当する音声データ)分の空き領域ができる。音声再生用バッファ164に映像データ1フレームの表示期間に相当する音声データブロック分の空き領域ができると、カーネルバッファ14に書き込まれた音声データブロックを音声再生用バッファ164に転送することができる。
すなわち、「write()」のシステムコールの後に続く処理がカーネルによってブロッキングされたあと、音声再生用バッファ164にすでに書き込まれている音声データブロックがD/A変換器161に出力されると、すなわち、所定の数の音声データサンプルがD/A変換器161に出力されると(ステップS131)、音声再生用バッファ164には映像データ1フレームの表示期間に相当する音声データブロック分の書き込み可能な領域ができる(ステップS132)。
音声再生用バッファ164に映像データ1フレームの表示期間に相当する音声データブロック分の空き領域ができると、カーネルバッファ14に書き込まれた音声データブロックが音声再生用バッファ164に転送され(ステップS133)、この音声データブロックの転送が終了すると、「write()」のシステムコールが終了する(ステップS134)。
このように、カーネルバッファ14から音声再生用バッファ164に音声データブロックが転送されると、「write()」のシステムコールが終了するので、その時点でカーネルによるブロッキングが解除され(ステップS135)、次のステップである映像データのフレーム更新処理に移る(これが映像再生同期信号となる。)。このタイミングでバッファフリップやビットブリットを行うことによって実際にフレーム更新がなされる。
このような動作を繰り返すことによって、映像データ1フレームの表示期間に相当する音声データのブロックがD/A変換器161に出力されるごとに映像再生同期信号を映像再生部17に出力することができる。すなわちこの手法では、システムコールをブロッキングモードで発行したときのカーネルの動作を利用して、ノン・プリエンプティブなマルチタスクOSを用いて、マルチタスクOSのタスクスケジューリング周期よりも精細なタイミングを取得することができ、そのタイミングを映像データのフレーム更新を行うための映像同期再生信号出力タイミングとして用いることができる。
なお、音声データのサンプリングレートと映像データのフレームレートとが整数比でない場合については、この実施形態2に係る映像音声同期再生方法においても、実施形態1に係る映像音声同期再生方法の場合と同様な方法を用いて対処することができる。
以上、本発明の映像再生同期信号生成方法及び映像音声同期再生方法を上述の各実施形態に基づいて説明したが、本発明は上述の各実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲で種々変形実施可能となるものである。
また、本発明は、上述の各実施形態1に係る映像再生同期信号生成方法や映像音声同期再生方法に限られず、これら映像再生同期信号生成方法や映像音声同期再生方法を実施する際に用いるタイミング制御装置や映像音声同期再生装置をも含むものである。また、上記したタイミング制御装置に映像再生同期信号生成方法を実行させる手順を有する映像再生同期信号生成プログラムや上記した映像音声同期再生装置に映像音声同期再生方法を実行させる手順を有する映像音声同期再生プログラムをも含むものである。この場合、これらの映像再生同期信号生成プログラムや映像音声同期再生プログラムは、フレキシブルディスク、光ディスク、ハードディスクなどの記録媒体に記録させておくこともできる。従って、本発明は、これらのプログラムが記録された記録媒体をも含むものである。もちろん、本発明は、ネットワークを介して供給可能なプログラムをも含むものである。
Claims (15)
- 映像データと音声データとを同期して再生するための映像再生同期信号を生成する映像再生同期信号生成方法であって、
映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、
前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップとを有することを特徴とする映像再生同期信号生成方法。 - 請求項1に記載の映像再生同期信号生成方法において、
前記出力処理終了タイミング取得ステップにおいては、前記音声再生部に対して出力される音声データの出力サンプル数のカウント値が所定値となるタイミングを、前記出力処理終了タイミングとして取得することを特徴とする映像再生同期信号生成方法。 - 請求項1に記載の映像再生同期信号生成方法において、
前記出力処理終了タイミング取得ステップにおいては、前記音声再生部に対して出力される音声データの所定位置に立てられたフラグを検出するタイミンダを、前記出力処理終了タイミングとして取得することを特徴とする映像再生同期信号生成方法。 - 請求項1に記載の映像再生同期信号生成方法において、
前記出力処理終了タイミング取得ステップにおいては、前記1フレーム相当音声データのブロックが前記音声再生部に対して転送されるタイミングを、前記出力処理終了タイミングとして取得することを特徴とする映像再生同期信号生成方法。 - 請求項1に記載の映像再生同期信号生成方法において、
ノン・プリエンプティブなマルチタスクオペレーティングシステムを用いて前記映像再生同期信号を生成することを特徴とすることを特徴とする映像再生同期信号生成方法。 - 請求項5に記載の映像再生同期信号生成方法において、
前記出力処理終了タイミング取得ステップにおいては、前記1フレーム相当音声データがブロックとして前記音声再生部に対して転送される際に発行されるシステムコールに基づいて設定されたブロッキングモードが、前記1フレーム相当音声データのブロックの転送終了によって解除されるタイミングを、前記出力処理終了タイミングとして取得することを特徴とする映像再生同期信号生成方法。 - 請求項1〜6のいずれかに記載の映像再生同期信号生成方法において、
前記1フレーム相当音声データの出力サンプル数を、映像データのフレームごとに設定可能な出力サンプル数設定ステップをさらに有し、
前記出力サンプル数設定ステップによって設定された前記出力サンプル数に基づいて、映像データのフレームごとに前記出力処理終了タイミング取得ステップを実行することを特徴とする映像再生同期信号生成方法。 - 請求項7に記載の映像再生同期信号生成方法において、
前記出力サンプル数設定ステップにおいては、前記出力サンプル数の平均値が所定値と等しくなるか近似するように、前記出力サンプル数を決定することを特徴とする映像再生同期信号生成方法。 - 請求項8に記載の映像再生同期信号生成方法において、
前記出力サンプル数の決定は、ブレゼンハム(Bresenham)のアルゴリズムを用いて行うことを特徴とする映像再生同期信号生成方法。 - 請求項7に記載の映像再生同期信号生成方法において、
前記出力サンプル数設定ステップにおいては、音声データのサンプリングレートと映像データのフレームレートとに基づいて前記出力サンプル数を決定するルールが記載されたテーブルを参照することによって、前記出力サンプル数を決定することを特徴とする映像再生同期信号生成方法。 - 映像データと音声データとを同期して再生するための映像再生同期信号を生成するタイミング制御装置に、
映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、
前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップとを実行させる手順を有することを特徴とする映像再生同期信号生成プログラム。 - 映像データと音声データとを同期して再生するための映像再生同期信号を生成するタイミング制御装置であって、
映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得して、前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成することを特徴とするタイミング制御装置。 - 映像データと音声データとを同期して再生する映像音声同期再生方法であって、
映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、
前記出力処理終了タイミングを取得するごとに前記映像再生同期信号を生成する映像再生同期信号生成ステップと、
前記映像再生同期信号によって映像データのフレーム更新を行うフレーム更新ステップとを有することを特徴とする映像音声同期再生方法。 - 映像データと音声データとを同期して再生可能な映像音声同期再生装置に、
映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得する出力処理終了タイミング取得ステップと、
前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成する映像再生同期信号生成ステップと、
前記映像再生同期信号によって映像データのフレーム更新を行うフレーム更新ステップとを実行させる手順を有することを特徴とする映像音声同期再生プログラム。 - 映像データと音声データとを同期して再生可能な映像音声同期再生装置であって、
音声データに基づいて音声再生処理を行う音声再生部と、
映像データに基づいて映像再生処理を行う映像再生部と、
映像データ1フレームの表示期間に相当する1フレーム相当音声データの音声再生部に対する出力処理終了タイミングを取得して、前記出力処理終了タイミングを取得するごとに映像再生同期信号を生成するタイミング制御部とを有し、
前記映像再生部は、前記映像再生同期信号に基づいてフレーム更新を行うことを特徴とする映像音声同期再生装置。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004207188 | 2004-07-14 | ||
JP2004207180 | 2004-07-14 | ||
JP2004207188 | 2004-07-14 | ||
JP2004207180 | 2004-07-14 | ||
PCT/JP2005/013207 WO2006006714A1 (ja) | 2004-07-14 | 2005-07-11 | 映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置、映像音声同期再生方法、映像音声同期再生プログラム及び映像音声同期再生装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2006006714A1 true JPWO2006006714A1 (ja) | 2008-05-01 |
Family
ID=35599018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006529208A Withdrawn JPWO2006006714A1 (ja) | 2004-07-14 | 2005-07-11 | 映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置、映像音声同期再生方法、映像音声同期再生プログラム及び映像音声同期再生装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7551839B2 (ja) |
JP (1) | JPWO2006006714A1 (ja) |
WO (1) | WO2006006714A1 (ja) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7778525B2 (en) * | 2004-07-23 | 2010-08-17 | Via Technologies, Inc. | Method of preventing audio or video from interruption due to the other for a mix mode multimedia player |
US9692537B2 (en) * | 2005-10-18 | 2017-06-27 | Avago Technologies General Ip (Singapore) Pte. Ltd. | System, method, and apparatus for jitter reduction in a video decoder system |
JP4245030B2 (ja) * | 2006-09-27 | 2009-03-25 | ソニー株式会社 | 出力処理装置及びその制御方法 |
JP2009005000A (ja) * | 2007-06-20 | 2009-01-08 | Sharp Corp | 光空間通信装置 |
US9876599B2 (en) * | 2007-12-17 | 2018-01-23 | Avago Technologies General Ip (Singapore) Pte. Ltd. | System(s), method(s), and apparatus for accurate detection of the end of stream |
KR101535827B1 (ko) * | 2008-12-05 | 2015-07-27 | 삼성전자주식회사 | 무선 통신 네트워크에서 오디오 및 비디오 동기화 장치 및 방법 |
US9338523B2 (en) * | 2009-12-21 | 2016-05-10 | Echostar Technologies L.L.C. | Audio splitting with codec-enforced frame sizes |
CN103119952B (zh) | 2010-09-22 | 2017-06-09 | 汤姆逊许可公司 | 处理多媒体流的方法以及相应设备 |
US9565426B2 (en) | 2010-11-12 | 2017-02-07 | At&T Intellectual Property I, L.P. | Lip sync error detection and correction |
US8861926B2 (en) * | 2011-05-02 | 2014-10-14 | Netflix, Inc. | Audio and video streaming for media effects |
US8682139B2 (en) * | 2011-05-02 | 2014-03-25 | Netflix, Inc. | L-cut stream startup |
US9247157B2 (en) * | 2011-05-13 | 2016-01-26 | Lattice Semiconductor Corporation | Audio and video data multiplexing for multimedia stream switch |
US9137616B1 (en) * | 2011-09-30 | 2015-09-15 | Tribune Broadcasting Company, Llc | Systems and methods for identifying a mute/sound sample-set attribute |
KR20150120963A (ko) * | 2013-02-21 | 2015-10-28 | 엘지전자 주식회사 | 영상 표시 장치 및 그 동작 방법 |
EP3282652B1 (en) * | 2015-04-08 | 2019-11-27 | Samsung Electronics Co., Ltd. | Method and apparatus for transmitting and receiving data in wireless communication system |
US10200768B2 (en) | 2017-03-30 | 2019-02-05 | Microsoft Technology Licensing, Llc | Low-latency mobile device audiovisual streaming |
JP7208531B2 (ja) * | 2019-05-31 | 2023-01-19 | 日本電信電話株式会社 | 同期制御装置、同期制御方法及び同期制御プログラム |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05137103A (ja) * | 1991-11-15 | 1993-06-01 | Hitachi Ltd | プレゼンテーシヨン装置 |
JPH06343165A (ja) * | 1993-06-01 | 1994-12-13 | Sony Corp | 伝送装置 |
JPH10200858A (ja) * | 1997-01-08 | 1998-07-31 | Sony Corp | 映像信号および音声信号の符号化装置、符号化方法、復号装置および復号方法並びに記録媒体 |
JPH1175157A (ja) * | 1997-08-29 | 1999-03-16 | Sony Corp | 映像信号及び音声信号の記録装置 |
JPH11134804A (ja) * | 1997-10-31 | 1999-05-21 | Toshiba Corp | 映像音声同期システム |
JP2001169249A (ja) * | 1999-12-09 | 2001-06-22 | Nec Corp | Av同期再生方法及びその装置並びに情報記録媒体 |
JP2003339023A (ja) * | 2002-05-22 | 2003-11-28 | Hitachi Ltd | 動画再生装置 |
-
2005
- 2005-07-11 WO PCT/JP2005/013207 patent/WO2006006714A1/ja active Application Filing
- 2005-07-11 JP JP2006529208A patent/JPWO2006006714A1/ja not_active Withdrawn
- 2005-07-12 US US11/178,486 patent/US7551839B2/en not_active Expired - Fee Related
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05137103A (ja) * | 1991-11-15 | 1993-06-01 | Hitachi Ltd | プレゼンテーシヨン装置 |
JPH06343165A (ja) * | 1993-06-01 | 1994-12-13 | Sony Corp | 伝送装置 |
JPH10200858A (ja) * | 1997-01-08 | 1998-07-31 | Sony Corp | 映像信号および音声信号の符号化装置、符号化方法、復号装置および復号方法並びに記録媒体 |
JPH1175157A (ja) * | 1997-08-29 | 1999-03-16 | Sony Corp | 映像信号及び音声信号の記録装置 |
JPH11134804A (ja) * | 1997-10-31 | 1999-05-21 | Toshiba Corp | 映像音声同期システム |
JP2001169249A (ja) * | 1999-12-09 | 2001-06-22 | Nec Corp | Av同期再生方法及びその装置並びに情報記録媒体 |
JP2003339023A (ja) * | 2002-05-22 | 2003-11-28 | Hitachi Ltd | 動画再生装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2006006714A1 (ja) | 2006-01-19 |
US7551839B2 (en) | 2009-06-23 |
US20060012709A1 (en) | 2006-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPWO2006006714A1 (ja) | 映像再生同期信号生成方法、映像再生同期信号生成プログラム、タイミング制御装置、映像音声同期再生方法、映像音声同期再生プログラム及び映像音声同期再生装置 | |
JP3053541B2 (ja) | デジタル記録音声及びビデオの同期式可変速度再生 | |
US5959684A (en) | Method and apparatus for audio-video synchronizing | |
KR100266196B1 (ko) | 멀티미디어 데이터 부호화 다중화 방법 및 그 장치와, 멀티미디어 데이터 부호화 다중화 프로그램 기록 매체 | |
CN106851044B (zh) | 一种视频同步回放方法及装置 | |
TW200806050A (en) | Method and system for synchronizing audio and video data signals | |
CN110798458B (zh) | 数据同步方法、装置、设备及计算机可读存储介质 | |
CN101119461A (zh) | 保持视频框及音频框同步播放的系统及方法 | |
JP2001094943A (ja) | Mpeg復号器の同期方法及び同期装置 | |
US7240013B2 (en) | Method and apparatus for controlling buffering of audio stream | |
JP6275506B2 (ja) | コンテンツ出力装置 | |
US8810689B2 (en) | Image processing apparatus, imaging apparatus, image processing method, and program for processing image data at a plurality of frame rates | |
KR100629093B1 (ko) | 디코딩 장치 및 디코딩 방법 | |
US8185815B1 (en) | Live preview | |
CN101019431A (zh) | 图像再现同步信号生成方法、程序、定时控制装置、图像声音同步再现方法、程序及装置 | |
EP1199890A2 (en) | Coded data transfer control method and storage and reproduction system | |
JP5101668B2 (ja) | デジタルビデオ収録再生装置 | |
CN113613221B (zh) | Tws主设备、tws从设备、音频设备及系统 | |
JP2011257870A (ja) | 光ディスク再生装置、光ディスク、データ配信システム、およびデータ配信方法 | |
WO2009098744A1 (ja) | ストリームデータの多重化装置および多重化方法 | |
JP2008054159A (ja) | 映像音声多重化装置 | |
KR100748370B1 (ko) | 비디오 및 오디오 데이터를 동기화하는 방법 및 동영상재생 장치 | |
JPH11134804A (ja) | 映像音声同期システム | |
CN108282720B (zh) | 一种音频数据流的传输方法及装置 | |
JP2001231035A (ja) | 復号同期制御装置、復号装置、及び復号同期制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20070410 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070906 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100831 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20101026 |