JP5147180B2 - ソフトウェアベースオーディオレンダリング - Google Patents

ソフトウェアベースオーディオレンダリング Download PDF

Info

Publication number
JP5147180B2
JP5147180B2 JP2006000680A JP2006000680A JP5147180B2 JP 5147180 B2 JP5147180 B2 JP 5147180B2 JP 2006000680 A JP2006000680 A JP 2006000680A JP 2006000680 A JP2006000680 A JP 2006000680A JP 5147180 B2 JP5147180 B2 JP 5147180B2
Authority
JP
Japan
Prior art keywords
audio
video
clock
drift
software
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.)
Active
Application number
JP2006000680A
Other languages
English (en)
Other versions
JP2006215540A (ja
Inventor
チェン ビ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2006215540A publication Critical patent/JP2006215540A/ja
Application granted granted Critical
Publication of JP5147180B2 publication Critical patent/JP5147180B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing 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/434Disassembling 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/4341Demultiplexing of audio and video streams
    • CCHEMISTRY; METALLURGY
    • C02TREATMENT OF WATER, WASTE WATER, SEWAGE, OR SLUDGE
    • C02FTREATMENT OF WATER, WASTE WATER, SEWAGE, OR SLUDGE
    • C02F3/00Biological treatment of water, waste water, or sewage
    • C02F3/02Aerobic processes
    • C02F3/10Packings; Fillings; Grids
    • C02F3/103Textile-type packing
    • CCHEMISTRY; METALLURGY
    • C02TREATMENT OF WATER, WASTE WATER, SEWAGE, OR SLUDGE
    • C02FTREATMENT OF WATER, WASTE WATER, SEWAGE, OR SLUDGE
    • C02F3/00Biological treatment of water, waste water, or sewage
    • C02F3/02Aerobic processes
    • C02F3/10Packings; Fillings; Grids
    • C02F3/109Characterized by the shape
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/236Assembling of a multiplex stream, e.g. transport stream, by combining a video stream with other content or additional data, e.g. inserting a URL [Uniform Resource Locator] into a video stream, multiplexing software data into a video stream; Remultiplexing of multiplex streams; Insertion of stuffing bits into the multiplex stream, e.g. to obtain a constant bit-rate; Assembling of a packetised elementary stream
    • H04N21/2368Multiplexing of audio and video streams
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing 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/4302Content synchronisation processes, e.g. decoder synchronisation
    • H04N21/4305Synchronising client clock from received content stream, e.g. locking decoder clock with encoder clock, extraction of the PCR packets
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing 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/4302Content synchronisation processes, e.g. decoder synchronisation
    • H04N21/4307Synchronising 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/43072Synchronising 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing 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/432Content retrieval operation from a local storage medium, e.g. hard-disk
    • H04N21/4325Content retrieval operation from a local storage medium, e.g. hard-disk by playing back content from the storage medium
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/81Monomedia components thereof
    • H04N21/8106Monomedia components thereof involving special audio data, e.g. different tracks for different languages
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8547Content authoring involving timestamps for synchronizing content
    • CCHEMISTRY; METALLURGY
    • C02TREATMENT OF WATER, WASTE WATER, SEWAGE, OR SLUDGE
    • C02FTREATMENT OF WATER, WASTE WATER, SEWAGE, OR SLUDGE
    • C02F3/00Biological treatment of water, waste water, or sewage
    • C02F2003/001Biological treatment of water, waste water, or sewage using granular carriers or supports for the microorganisms

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Hydrology & Water Resources (AREA)
  • Environmental & Geological Engineering (AREA)
  • Water Supply & Treatment (AREA)
  • Chemical & Material Sciences (AREA)
  • Organic Chemistry (AREA)
  • Microbiology (AREA)
  • Biodiversity & Conservation Biology (AREA)
  • Databases & Information Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Description

本発明は、メディアレンダリングに関し、具体的にはソフトウェアベースオーディオレンダリングに関する。
メディアコンテンツを聞き、かつ/または見ることに関する大きい消費者需要がある。そのようなメディアコンテンツは、多数のソースからたやすく入手可能である。消費者は、そのようなメディアを見、かつ/または聞くときに良質の経験を望む。さらに、消費者は、複数の機能を実行でき、なおかつ良質のユーザ経験を提供できる単一の多用途消費者デバイスを高く評価する。
パーソナルコンピュータ(PC)は、メディアを見、かつ/または聞く多用途プラットフォームを提供する。PCは、メディアを入手し、適宜、オーディオデータおよびビデオデータに解析する。次に、PCは、メディアをデコードし、ディスプレイデバイスおよび/またはスピーカを介するなど、ユーザへの提示のためにデータをレンダリングする。PCは、ソフトウェアベースコンポーネントを単独で、またはハードウェアコンポーネントと組み合わせて利用して、メディアをデコードし、レンダリングする。PCプラットフォームのソフトウェアベースコンフィギュレーションは、さまざまなメディアフォーマットを再生するように適合可能なので、多用途である。さらに、新しいフォーマットが開発されたときに、その新しいフォーマットを処理するようにPCをアップデートすることができる。しばしば、そのようなアップデートは、ユーザの努力をほとんどまたは全く伴わずに、自動的に行うことができる。ハードウェアベースプラットフォームなどの他のプラットフォームは、製造時に「構成」され、そのような機能を全く有しないか制限されているので、より多用途でない。
PCのこの多用途性が、広い消費者の受け入れにつながった。しかし、その多用途性を活用するために、PCプラットフォームは、他のものよりも、さまざままな設計パラメータに優先順位を与えている。たとえば、オーディオサンプルがライブソースから収集される場合に、既存PCプラットフォームでのオーディオレンダリングは、オーディオハードウェアレンダレートをオーディオサンプルキャプチャレートと調整する能力を有しない場合がある。この2つの間の相違は、些細ではあるが、チェックされない場合に長い再生時間にわたって大きくなる。
たとえば、オーディオサンプルが、地上波、ケーブル、または衛星のラジオ放送システムまたはTV放送システムなどのライブソースからキャプチャされる場合に、ソースクロックとオーディオレンダハードウェアクロックの間のドリフトは、最終的に、いくつかのオーディオサンプルが捨てられるか、無音がライブオーディオストリームに挿入されるほどに非常に大きくなる場合がある。そのようなシナリオは、より不満足なユーザ経験をもたらす可能性がある。さらに、オーディオレンダリングコンポーネントが、しばしばメディアソースまたはビデオレンダリングコンポーネントと同期化されない可能性があるそれ自体のクロックに基づいてレンダリングするPCプラットフォームでは、オーディオプレゼンテーションが、見る人が簡単に気付く程度までに、対応するビデオプレゼンテーションと同期はずれになるシナリオが発生し得る。そのようなシナリオは、映画の再生または長時間の単一のTVチャネルの視聴時など、長い再生時間によって悪化する。
技術が進歩するにつれて、消費者は、消費者デバイスおよびシナリオのますます拡大されるニッチを満たすために、高められたイメージ品質および/またはサウンド品質と組み合わされた現在のPCのソフトウェアベースプラットフォームによって提供される柔軟性を望む。
ソフトウェアベースオーディオレンダリングについて説明する。
具体的な実装に、ドリフトが閾値に達するまで外部クロックとオーディオクロックの間の第1ドリフトレートを測定するように構成されたコンピュータ可読媒体が含まれる。ドリフトが閾値に達することに応答して、第1ドリフトレートに基づいて、この実装は、オーディオクロックを操作して、より小さい値および第1ドリフトレートと反対の極性を有する第2ドリフトレートを達成する。
別の実装は、第1オーディオサンプルの潜在的なオーディオレンダリング時刻を判定する。この実装は、第1ビデオフレームの潜在的なビデオレンダリング時刻を確かめる。この実装は、潜在的なオーディオレンダリング時刻および潜在的なビデオレンダリング時刻のうちの遅い方で第1オーディオサンプルおよび第1ビデオフレームをレンダリングする。
概要
次の説明は、ソフトウェアベースオーディオレンダリングならびに/あるいは外部クロックを用いるオーディオレンダリングプロセスおよび/またはビデオレンダリングプロセスの同期化の方法およびシステムに関する。
ディジタルオーディオコンテンツは、ユーザのためのサウンドを作るために、所与のソースレートで処理されるように構成された複数のサンプルと考えることができる。ソースは、ソースクロックに従って、所与のオーディオサンプリングレートでオーディオサンプルを供給する。オーディオデコーダは、オーディオサンプルをデコードし、デコードされたコンテンツの個々のサンプルをレンダリングに使用可能にする。オーディオサンプルを、オーディオハードウェアにレンダリングすることができる。オーディオハードウェアは、所与のソースレートに従う処理サイクルセットを有する。オーディオハードウェアは、オーディオハードウェアのクロックに従うソースサンプリングレートでサンプルを処理または消費するが、このクロックが、ソースハードウェアのクロックとわずかに異なる場合がある。
ソフトウェアベースオーディオレンダリングプロセスは、ソースからのオーディオコンテンツの生産と、オーディオハードウェアでのそのコンテンツの消費または処理を調整することができる。ソフトウェアベースオーディオレンダリングプロセスは、オーディオクロック時間を利用して、レンダリングプロセスを調整する。オーディオクロックは、1単位の時間にオーディオハードウェアによって消費されるオーディオサンプルの個数から導出され、この時間は、オーディオハードウェアのクロックを反映する。
一実装で、ソフトウェアベースオーディオレンダリングプロセスは、外部クロックに対するオーディオクロックのレートを測定することによって、そのオーディオクロックを外部クロックと同期化する。たとえば、オーディオレンダリングプロセスは、ドリフトが閾値に接近しつつある第1状態中にレートを測定することができる。この閾値は、システムジッタより大きいが、顕著な口合わせ(リップシンク)不一致を作る値より小さい、ある範囲の値から選択することができる。次に、オーディオレンダリングプロセスは、測定されたレートに基づいて、第2状態に過剰補償し、その結果、クロックドリフトが打ち消される。いくつかの実装は、オーディオクロックレートが測定されたレートの周囲で発振するように、測定されたレートとオーディオレートの間のドリフトのレートを微調整するさらなるステップを行う。これらの実装は、オーディオレートが測定されたレートの周囲でどのように発振するかを選択するときに、システムジッタおよびリップシンク不一致などの問題を予期することができる。オーディオクロックが測定されたレートの周囲で発振するときに、累積ドリフトが打ち消されて、非常に満足なユーザ経験が提供される。
いくつかの実装は、個々のフレームを捨てるか多くを捨てる(デシメートする)ことまたは状況に応じて個々のフレームを複数回レンダリングすることを伴うレート再サンプリングを利用することによって、オーディオクロックを操作する。オーディオクロックレートを操作する手段としてのレート再サンプリングを、以下で詳細に説明する。
ユーザのためにビデオイメージを作るために、ディスプレイデバイスおよび関連するグラフィックスハードウェアは、ユーザが「モーションビデオ」として知覚する一連のシーケンシャルイメージを生成するように構成される。ディスプレイデバイスは、標準規格のセットに従って構成されて、非常に正確なディスプレイサイクルまたは動作サイクルに従う。各ディスプレイサイクルの一貫した期間の間に、ディスプレイデバイスは、使用可能なビデオフレームからイメージを生成する。ソフトウェアベースビデオレンダリングプロセスは、このディスプレイサイクルを追跡するように構成される。ソフトウェアベースビデオレンダリングエンジンは、この追跡に基づいて、ディスプレイサイクルの適切な点でディスプレイデバイスのために個々のビデオフレームをレンダリングすることができる。モーションビデオのユーザの知覚しまたは見る経験は、一連の個々のフレームがディスプレイデバイスのディスプレイサイクルに従ってレンダリングされたときに質を高められる。
さらに、ユーザの見る経験は、対応するオーディオデータおよびビデオデータが同期化された形でユーザに提示されるときに質を高められる。オーディオプレゼンテーションとビデオプレゼンテーションを同期化する実装を説明する。たとえば、ユーザが、ムービーなどに関する再生コマンドを発行したときに、同期化プロセスは、そのムービーの第1オーディオサンプルの潜在的なオーディオレンダリング時刻を判定することができ、そのムービーの第1ビデオサンプルの潜在的なビデオレンダリング時刻を確かめることができる。次に、同期化プロセスは、潜在的なオーディオレンダリング時刻および潜在的なビデオレンダリング時刻のうちの遅い方で第1オーディオサンプルおよび第1ビデオフレームをレンダリングすることができ、オーディオプレゼンテーションとビデオプレゼンテーションが同時に開始されるようになる。
以下で説明する実装は、コンピューティング環境に関して説明される。さまざまなコンフィギュレーションを、パーソナルコンピュータすなわちPCなどのコンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令またはコード手段によって実装することができる。一般に、プログラムモジュールに、特定のタスクを実行するか特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、および類似物が含まれる。
さまざまな実施形態を、PC以外のコンピュータシステムコンフィギュレーションで実装することができる。たとえば、さまざまな実施形態を、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラマブルなコンシューマエレクトロニクス、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、および類似物で実現することができる。さらに、テクノロジが進歩を続けるので、さまざまな実施形態を、これから識別されるクラスのデバイスで実現することができる。たとえば、さらに高まる処理能力と組み合わされた本発明の多用途性は、全般的な物理的外見において現在のセル電話機に似ているが、デバイスの処理機能、データ伝送機能、および/またはディスプレイ機能を介してさまざまな組み合わされた機能性を実行できるデバイスを作ることができる。これは、説明される実装に関する、多数の既存のおよび開発されるコンフィギュレーションの1つにすぎない。
その代わりにまたはそれに加えて、さまざまな実施形態を、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境で実践することもできる。分散コンピューティング環境では、プログラムモジュールを、ローカルとリモートの両方のメモリストレージデバイスに配置することができる。
さまざまな実施形態を、上で提案した多数のタイプのオペレーティング環境に組み込むことができるが、この文書の末尾の見出し「例示的なオペレーティング環境」の下で詳細に説明する普通のコンピューティングデバイスの形の例示的な汎用コンピューティングデバイスに関して、1つのみの例示的な環境の説明を、図2に示す。
例示的実装
図1に、ソフトウェアベースオーディオレンダリングおよび/またはソフトウェアベースビデオレンダリングを実行する例示的なシステム100を示す。システム100に、ディスプレイデバイス104に結合された、PCなどのコンピューティングデバイス102が含まれる。コンピューティングデバイス102を、全般的に106に示されているように、インターネットなどのネットワークにも結合することができる。
コンピューティングデバイス102に、ソース110、パーサ112、オーディオデコーダ114、2つのオーディオバッファ115A、115B、ソフトウェアベースオーディオレンダリングエンジン116、およびオーディオハードウェア118を含めることができる。このコンピューティングデバイスに、ソフトウェアベースビデオデコーダ120、2つのビデオバッファ122A、122B、ソフトウェアベースビデオレンダリングエンジン124、グラフィックスハードウェア126、およびTVエンコーダ128も含まれる。この特定のシステムコンフィギュレーションで、パーサ112、オーディオデコーダ114、オーディオバッファ115A、115B、オーディオレンダリングエンジン116、ビデオデコーダ120、バッファ122A、122B、およびビデオレンダリングエンジン124は、ソフトウェアモジュールとして実装される。これらのモジュールは、メモリに保管され、1つまたは複数のプロセッサによって実行される。メモリおよびプロセッサは、図1に明示的に図示されてはいないが、そのようなコンピューティングシステムの1つの例示的なコンフィギュレーションを、図5に示す。
ソース110は、ビデオコンテンツおよび/またはオーディオコンテンツのローカルストアを表し、このローカルストアに、これらのコンテンツがさまざまなフォーマットで保管される。ソース110は、データストレージまたはメモリデバイスとして実装することができる。ソース110の代わりにまたはこれに加えて、コンピューティングデバイス102は、ネットワーク106を介して外部ソースにアクセスすることもできる。パーサ112は、ソース110からまたはネットワーク106を介して受け取られたオーディオコンテンツおよび/またはビデオコンテンツのさまざまなデータフォーマットを認識するように構成される。パーサ112は、オーディオデータをソフトウェアベースオーディオデコーダ114に配信し、ビデオデータをソフトウェアベースビデオデコーダ120に配信する。
オーディオ
ディジタルオーディオコンテンツは、ユーザのためにサウンドを累積的に作るために所与のソースレートで処理されるように構成された複数のサンプルと考えることができる。ソース110などのソースは、ソースクロックまたは外部クロック(具体的に指定されない)に従って所与のソースレートでオーディオサンプルを供給する。たとえば、所与のソースレートが、1000サンプル毎秒またはヘルツ(Hz)である場合に、そのソースは、ソースクロックに従って1000hzのレートでサンプルを作る。他のソースレートが以下で説明する技法に適するが、ソースレートは、一般に、20000ヘルツから50000ヘルツの範囲で動作する。そのように高いサンプル毎秒では、人間は、一般に個々のサンプルを検出することができない。以下で明白になるように、この事実を、オーディオクロック同期化に有利に使用することができる。
オーディオデコーダ114は、ソースによって作られたオーディオサンプルをデコードし、個々のデコードされたサンプルを、オーディオバッファ115Aを介してオーディオレンダリングエンジン116から使用可能にする。これらのオーディオサンプルを、オーディオハードウェア118にレンダリングすることができる。オーディオハードウェアは、所与のソースレートに従ってセットされた処理サイクルを有する。たとえば、ソースレートが1000サンプル毎秒である場合に、オーディオハードウェアの処理サイクルは、毎秒1000個のオーディオサンプルが消費されるようにセットされる。オーディオハードウェアは、それ自体は読取可能なクロック時間を有しない場合があるが、ハードウェアの処理レートは、外部クロックでの単位時間ごとに消費されるサンプル数として、またはオーディオハードウェアによって消費されるサンプルに対するソースで作られるサンプル数として判定することができる。
オーディオレンダリングエンジン116は、オーディオクロックを使用して、オーディオレンダリングプロセスのタイミングを決定する。オーディオクロックレートは、単位時間あたりにオーディオハードウェアによって消費されるサンプルの個数から導出される。ソフトウェアベースオーディオレンダリングエンジン116は、外部クロックに対するオーディオクロックを追跡または測定するように構成される。ソフトウェアベースオーディオレンダリングエンジンは、さらに、オーディオクロックと外部クロックの間の累積ドリフトを減らすためにアクションを行うことができる。したがって、たとえば、ソースプレゼンテーション時間が1時間であると仮定する。ソフトウェアベースオーディオレンダリングプロセスは、オーディオクロックと外部クロックが1時間の持続時間中の特定の瞬間的な時点に正確に同期化されている場合でもそうでない場合でも、1時間の再生時間の過程でこの2つのクロックの間の累積ドリフトを減らすアクションを行うことができる。さらに、以下で説明するように、オーディオクロックを測定されたレートに正確に一致させることを試みるのではなく、オーディオレンダリングエンジンは、オーディオクロックレートが測定されたレートの周囲で発振して、すべての累積ドリフトを効果的に打ち消すように、オーディオクロックを操作することができる。
ソフトウェアベースオーディオレンダリングエンジンを実装して、オーディオクロックと外部クロックの間の累積ドリフトを減らすことができるプロセスのより詳細な例を、以下で図3〜4に関して説明する。
ビデオ
ソフトウェアベースビデオデコーダ120は、パーサ112からビデオコンテンツを受け取り、ビデオコンテンツの個々のフレームをデコードする。ソフトウェアベースビデオデコーダ120は、デコードされたフレームをバッファ122Aにバッファリングする。ソフトウェアベースビデオレンダリングエンジン124は、バッファ122Aにアクセスし、バッファ122Aに置かれたデコードされたフレームをビデオデコーダ120によってレンダリングする。フレームがレンダリングされると、ソフトウェアベースビデオレンダリングエンジンは、レンダリングされたフレームをグラフィックスハードウェア126に出力する。レンダリングされたフレームは、バッファ122Bにも保管され、ここで、このフレームを、ビデオデコーダ120によってダウンストリームフレームのデコードに使用することができる。この特定のシステムコンフィギュレーションでは、2つのバッファが使用される。しかし、他のシステムコンフィギュレーションでは、3つ以上のバッファを使用することができる。さらに、この特定のシステムコンフィギュレーションでは、2つのFIFO(先入れ先出し)バッファが利用される。
バッファ122A、122Bは、ソフトウェアベースビデオレンダリングエンジン124が、ソフトウェアベースビデオデコーダ120と独立に、非同期に動作することを可能にする。ビデオデコーダ120は、あるレートでビデオフレームを処理し、キューイングすることができ、ビデオレンダリングエンジン124は、異なるレートでフレームを抽出し、処理することができる。これによって、ビデオデコーダ120が、ビデオフレーム表示レートより速いレートでビデオフレームをデコードすることが可能になる。したがって、たとえば、表示レートが30フレーム毎秒(fps)である場合に、デコーダは、ある時間期間に40fpsをデコードすることができる。デコーダがバッファフレームを蓄積することを可能にすることによって、この実装は、より高い優先順位のアクティビティを有する他のソフトウェアモジュールの突然の急増に起因して、ソフトウェアベースビデオデコーダが遅れずにビデオフレームをデコードするのに十分なCPUサイクルを得られない状況で、満足に実行することができる。余分にバッファリングされたフレームは、ソフトウェアベースビデオデコーダ120が、そのような状況を補償するために前もって少し多いフレームをデコードすることを可能にすることによって、これの発生を減らすことができる。
ソフトウェアベースビデオレンダリングエンジン124は、個々のビデオフレームをグラフィックスハードウェア126にレンダリングする。このグラフィックスハードウェアは、レンダリングされたフレームをTVエンコーダ128に提示する。TVエンコーダは、ビデオフレームをスキャンし、そのデータを、イメージを生成するためにディスプレイデバイス104によって利用される形で提示する。イメージのシーケンシャルシリーズが、ユーザが知覚できるモーションビデオを作る。
NTSC標準規格に従って、ディスプレイデバイス104およびTVエンコーダ128は、定義されたディスプレイサイクルに従って2つのスキャニングサイクルまたはVBIサイクルに各フレームを表示する。1ディスプレイサイクル内で、第1のスキャニングサイクルは、偶数フィールドに関し、第2のスキャニングサイクルは、奇数フィールドに関する。各スキャニングサイクルは、標準規格によって指定された持続時間だけ続く。第1のスキャニングサイクルで、イメージが、フレームの偶数フィールドから作成され、第2のスキャニングサイクルで、イメージが、偶数フィールドとインターレースされた奇数フィールドから作成される。偶数フィールドでは、TVエンコーダ128が、フレームの偶数走査線をスキャンし、奇数フィールドでは、TVエンコーダ128が、フレームの奇数走査線をスキャンする。
すべてのフィールドについて、TVエンコーダ128は、スクリーンの左上から始めて走査線をスキャンし、スクリーンの右下に達するまで1つおきの走査線に沿って水平にスキャンする。右下に達した時に、TVエンコーダ128は、ディスプレイの右下角から左上に戻るときに、スキャンしない垂直帰線消去期間(VBI)イベントを通る。各フィールドは、1つのスキャニングサイクルまたはVBIサイクルに表示され、ここで、VBIサイクルは、あるVBIイベントから次のVBIイベントまでにまたがるものとして定義される。NTSC標準規格によれば、各VBIサイクルは、16.67ミリ秒(ms)だけ続く。各フレームが、2つのVBIサイクルの間表示されるので、フレームのディスプレイサイクルは、33.34msである。
ユーザのためのオーディオ出力とビデオ出力の同期化
ソフトウェアベースオーディオレンダリングエンジン116およびソフトウェアベースビデオレンダリングエンジン124は、システム100が、ユーザのために対応するオーディオとビデオを同期化することを可能にする。たとえば、ソフトウェアベースビデオレンダリングエンジンは、個々のビデオフレームが、ディスプレイデバイスでの表示のためにスキャンされるディスプレイサイクルに入る実際の時刻を判定することができる。ソフトウェアベースビデオレンダリングエンジンは、この時刻をソフトウェアベースオーディオレンダリングエンジンに伝えることができ、このソフトウェアベースオーディオレンダリングエンジンは、対応するオーディオサンプルを適当な時刻にレンダリングすることができ、その結果、サウンド作成が、ビジュアルイメージに対応するようになる。そのようなプロセスを、以下で少なくとも図8〜9に関して説明する。
例示的なオペレーティング環境
図2に、上で説明したソフトウェアベースビデオレンダリングプロセスを実装するのに使用できる例示的なコンピューティングデバイスを示す。コンピューティングデバイス242に、1つまたは複数のプロセッサまたは処理ユニット244、システムメモリ246、およびシステムメモリ246を含むさまざまなシステムコンポーネントをプロセッサ244に結合するバス248が含まれる。マルチスレッディング技法を1つまたは複数のプロセッサで使用して、複数のタスクの並列処理を可能にすることができる。
バス248は、メモリバスまたはメモリコントローラ、周辺バス、accelerated graphics port、およびさまざまなバスアーキテクチャのいずれかを使用するプロセッサバスまたはローカルバスを含む複数のタイプのバス構造のいずれかの1つまたは複数を表す。システムメモリ246に、読取専用メモリ(ROM)250およびランダムアクセスメモリ(RAM)252が含まれる。スタートアップ中などにコンピューティングデバイス242内の要素の間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム(BIOS)254が、ROM 250に保管される。
コンピューティングデバイス242に、さらに、ハードディスク(図示せず)から読み取り、これに書き込むハードディスクドライブ256、リムーバブル磁気ディスク260から読み取り、これに書き込む磁気ディスクドライブ258、CD ROMまたは他の光学媒体などのリムーバブル光ディスク264から読み取るか、これに書き込む光ディスクドライブ262を含めることができる。ハードディスクドライブ256、磁気ディスクドライブ258、および光ディスクドライブ262は、SCSIインターフェース266または他の適当なインターフェースによってバス248に接続される。ドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージをコンピュータ242に提供する。本明細書で説明する例示的な環境は、ハードディスク、リムーバブル磁気ディスク260、およびリムーバブル光ディスク264を使用するが、当業者は、磁気カセット、フラッシュメモリカード、ディジタルビデオディスク、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、および類似物などの、コンピュータによってアクセス可能なデータを保管できる他のタイプのコンピュータ可読媒体も、例示的なオペレーティング環境で使用できることを諒解するであろう。
オペレーティングシステム270、(ユーザエージェントまたはブラウザなどの)1つまたは複数のアプリケーションプログラム272、他のプログラムモジュール274、およびプログラムデータ276を含む、複数のプログラムモジュールを、ハードディスク256、磁気ディスク260、光ディスク264、ROM 250、またはRAM 252に保管することができる。ユーザは、キーボード278およびポインティングデバイス280などの入力デバイスを介して、コンピュータ242にコマンドおよび情報を入力することができる。他の入力デバイス(図示せず)に、マイクロホン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナ、または類似物を含めることができる。上記および他の入力デバイスは、しばしば、バス248に結合されたインターフェース282を介して処理ユニット244に接続される。モニタ284または他のタイプのディスプレイデバイスも、ビデオハードウェア286などのインターフェースを介してバス248に接続される。モニタに加え、パーソナルコンピュータに、通常、スピーカおよびプリンタなどの他の周辺出力デバイス(図示せず)が含まれる。
コンピュータ242は、一般に、リモートコンピュータ288などの1つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク化された環境で動作する。リモートコンピュータ288は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、または他の一般的なネットワークノードとすることができ、通常は、上でコンピュータ242に関して説明した要素の多くまたはすべてが含まれる。図4に示された論理接続に、ローカルエリアネットワーク(LAN)290および広域ネットワーク(WAN)292が含まれる。そのようなネットワーキング環境は、オフィス、会社全体のコンピュータネットワーク、イントラネット、およびインターネットでありふれたものである。
LANネットワーキング環境で使用されるとき、コンピュータ242は、ネットワークインターフェースまたはネットワークアダプタ294を介してローカルネットワークに接続される。WANネットワーキング環境で使用されるとき、コンピュータ242に、通常は、インターネットなどの広域ネットワーク292を介する通信を確立する、モデム296または他の手段が含まれる。モデム296は、内蔵または外付けとすることができるが、シリアルポートインターフェース268を介してバス248に接続される。ネットワーク化された環境では、パーソナルコンピュータ242に関して図示されたプログラムモジュールまたはその一部を、リモートメモリストレージデバイスに保管することができる。図示のネットワーク接続が例示的であり、コンピュータの間の通信リンクを確立する他の手段を使用できることを諒解されたい。
コンピュータに、アナログまたはディジタルのチューナコンポーネント298も含めることができる。チューナコンポーネントを、PCIなどの内部バスまたは拡張バス、あるいはUSBバス、IEEE−1394バスなどの外部バスのいずれかを介してシステムにリンクすることができる。チューナコンポーネントは、システムが、地上波、ケーブル、および衛星などの標準TV放送媒体を介して放送TVを受信できるようにする。
一般に、コンピュータ242のデータプロセッサは、異なる時にこのコンピュータのさまざまなコンピュータ可読記憶媒体に保管される命令によってプログラムされる。プログラムおよびオペレーティングシステムは、通常、たとえばフロッピディスクまたはCD−ROMで配布される。そこから、プログラムおよびオペレーティングシステムが、コンピュータの二次メモリにインストールまたはロードされる。実行時に、プログラムおよびオペレーティングシステムは、少なくとも部分的に、コンピュータの主電子メモリにロードされる。本明細書に記載のシステムに、他のデータプロセッサのマイクロプロセッサと共に、説明されるブロックを実装する命令またはプログラムを含む時の、上記および他のさまざまなタイプのコンピュータ可読記憶媒体が含まれる。説明されているシステムに、本明細書で説明する方法および技法に従ってプログラムされた時の、コンピュータ自体も含めることができる。
例示のために、オペレーティングシステムなどのプログラムおよび他の実行可能プログラムコンポーネントを、本明細書では別個のブロックとして示すが、そのようなプログラムおよびコンポーネントが、さまざまな時にコンピュータのさまざまなストレージコンポーネントに存在し、コンピュータのデータプロセッサによって実行されることを諒解されたい。
ソフトウェアベースビデオレンダリングに関する実施形態を、構造的特徴および/または方法に固有の言葉で説明したが、添付請求項の主題が、説明された特定の特徴または方法に必ずしも制限されないことを理解されたい。そうではなく、特定の特徴および方法は、ソフトウェアベースビデオレンダリングの例示的な実装として開示されたものである。
例示的なオーディオレンダリング実装
図3に、全般的に300に示された、外部クロックとソフトウェアベースオーディオレンダリングクロックの間の累積ドリフトを制限する例示的なソフトウェアベースオーディオレンダリングプロセスを示す。
動作302で、ソフトウェアベースオーディオレンダリングプロセスが、ソースサンプルレートを確かめる。ソースに、一般に、ソースサンプルが提示されるように構成されたレートであるソースサンプルレートを示すある基準が含まれる。たとえば、一般的なソースサンプルレートは、44.1キロヘルツ(KHz)である。ソースサンプルレートが44.1KHzである場合に、そのソースは、ソースクロックまたは外部クロックに対して44.1KHzでサンプルを作るべきであり、オーディオハードウェアは、オーディオハードウェアクロックに対して44.1KHzでサンプルを作るべきである。
動作304で、ソフトウェアベースオーディオレンダリングプロセスが、外部クロックとそのソフトウェアベースオーディオレンダリングプロセスによって使用されるソフトウェアベースオーディオレンダクロックの間のドリフト閾値(以下では「閾値」)を選択する。この閾値は、外部クロックとオーディオハードウェアクロックの間のクロック差の正確な測定を実現するのに十分に大きくなるべきであるが、顕著なリップシンク問題を生じないのに十分に小さくなるべきである。たとえば、1つの例のみで、16msの閾値が利用される。
動作306で、ソフトウェアベースオーディオレンダリングプロセスが、外部クロックレートに対してソフトウェアベースオーディオレンダクロックレートを測定する。ソースの再生が開始され、サンプルが、ソースで作られ、デコードされ、レンダリングされ、その後、オーディオハードウェアで処理される。一実装で、ソフトウェアベースオーディオレンダリングプロセスは、サンプルがソースによって作られるレートに対する、サンプルがオーディオハードウェアによって消費されるレートを追跡する。測定された差を利用して、このプロセスは、このプロセスの後続動作でオーディオクロックレートを操作するときに利用されるレート調整を判断する。レート調整は、以下で述べるアルゴリズムに関して詳細に説明する。次の説明を単純にするために、レート調整の値が、この例について1サンプル毎秒として決定されると仮定する。
動作308で、ソフトウェアベースオーディオレンダリングプロセスが、基準クロックとオーディオクロックの間のドリフトが閾値に達するまで、第1状態を追跡する。
説明のために、図3と組み合わせて図4を検討されたい。図4に、全般的に400に示された、例示的なソフトウェアベースオーディオレンダクロック同期化プロセスのグラフィカル表現を示す。外部クロック時間が、全般的に線402によって示されている。ソフトウェアベースオーディオレンダクロック時間は、全般的に線404によって示されている。例のために、ユーザ「再生」コマンドに応答して、オーディオクロックおよび外部クロックが、406に示された時刻0に同時に開始されると仮定する。
やはり説明のために、ソースレートが1000ヘルツであると仮定する。外部クロックでの1秒の終りに、ソースは、1000個のサンプルを提示し終えている。同様に、ハードウェア消費レートは、オーディオハードウェアが1秒に1000個のサンプルを処理すべきであるとセットされている。しかし、外部クロックでの1秒の終りに、オーディオハードウェアが、1002個のサンプルを消費したと仮定する。したがって、基準クロックレートに対して、測定されたレートは、基準クロックより毎秒2サンプル速い。したがって、オーディオクロックは、測定された2サンプル毎秒のレートで外部クロックから離れてドリフトする。そのような例が、第1状態408によって全般的に示されており、第1状態408は、5秒後に、ドリフトの最高点に達して、閾値410に達する。
動作308でドリフトが第1閾値に達したことに応答して、ソフトウェアベースオーディオレンダリングプロセスは、動作310で、第1状態のドリフトを過剰に訂正する応答アクションを行うことができる。たとえば、ソフトウェアベースオーディオレンダリングプロセスは、オーディオクロックレートを操作して、第1状態と反対方向で、第1閾値と反対の極性を有する第2閾値に向かうドリフトを引き起こすことができる。説明を簡単にするために、この例では、第1閾値と第2閾値の両方について、同一の閾値大きさ10を利用する。他の実装は、第1閾値の大きさより小さい第2閾値大きさを利用する。
この例では、このプロセスが、オーディオクロックレートを操作して、動作306で判定された1フレーム毎秒のレート調整値を達成する。この例では、ソフトウェアベースオーディオレンダリングプロセスは、オーディオクロックレートが測定されたクロックレートより遅い、全般的に412に示された第2状態を作成することによって、第1状態のドリフトを過剰補償する。第2状態では、ソフトウェアベースオーディオレンダクロックが、測定されたレートからのドリフトの大きさが反対方向の所定の値と等しくなるまで、効果的に第1状態と反対方向に、より低いレートでドリフトする。
したがって、たとえば、第6秒から始まる期間に、ソフトウェアベースオーディオレンダリングプロセスは、ソースから受け取った1000個のフレームのうちのいくつかを2回レンダリングし、より多くのサンプルが1秒のスパンにオーディオハードウェアにレンダリングされるようにすることによって、過剰補償する。サンプルを複数回レンダリングすることを、「挿入」と呼ぶことができる。というのは、その影響が、1サンプル期間中に消費される余分なサンプルを作成することだからである。前に判定されたように、オーディオハードウェアは、1秒に1002個を処理することができる。したがって、ソフトウェアベースレンダリングプロセスは、これらのフレームのうちの3つを2回レンダリングすることによって3つの余分なサンプルを挿入することによって、オーディオクロックを操作する。ここで、オーディオクロックは、測定されたレートよりわずかに低い有効クロックレートを有する。第2状態412では、ソフトウェアベースオーディオレンダクロックが、5秒目から15秒目の間に外部クロックに向かって逆にドリフトし、15秒目で、ドリフトが、第1状態で発生したのと反対の方向に累積し始める。このプロセスの25秒目に、ドリフトが、もう一度、10の大きさを有する閾値410に達するが、この大きさの値は、ドリフトが第1状態と反対方向であることを示す、第1状態と反対の値である。
動作312で、第2状態で閾値に達したことに応答して、ドリフトが第1状態に向かって発振するようにオーディオクロックレートを操作することができる。この例では、オーディオクロックレートを、調整要因と一貫する量だけ測定されたレートより速くなるように操作することができる。たとえば、そのような操作に、後続の秒にフレームをデシメートすることを含めることができる。デシメーティングは、単に、そうでなければレンダリングされるはずの複数のフレームを単位時間内に捨てることを意味することができる。
この形で、挿入およびデシメーティングの上記の動作は、測定されたレートの周囲でオーディオクロックレートを発振させるように働くことができる。その結果、オーディオクロックレートと測定されたレートの間の累積ドリフトが、減るかなくなる。以下で説明するアルゴリズムは、ドリフト調整値を、ここで説明したものより正確な範囲に調整できる、洗練された実装を提供する。
例示的なアルゴリズム
次のアルゴリズムをソフトウェアベースオーディオレンダリングプロセスによって利用して、外部クロックとソフトウェアベースオーディオレンダクロックの間のドリフトを減らすかなくすことができる。このアルゴリズムは、オーディオクロックが外部クロックより低速の第1状態とオーディオクロックが外部クロックより高速の第2状態との間で交番することによって、ソフトウェアベースオーディオレンダクロックと外部クロックの間の累積ドリフトをなくすことができる。
ハードウェアクロックに基づくソフトウェアクロック実装は、他の要因の中でも、分解能、精度、およびエラー累積によって制限されているので、完全になることができない。これを認識して、次のソフトウェアクロック同期化アルゴリズムは、オーディオクロックを、外部クロックに対して所定の大きさのプラス/マイナス値(反対の極性)の間でドリフトさせることを可能にする。そのような実装は、上で述べた有害な要因からのある度合の免疫を提供することができる。いくつかの例で、このソフトウェアクロック同期化アルゴリズムは、すべてのそのような要因からの完全な免疫を提供することができる。そのような実装は、直接の訂正応答を用いてドリフトに反応する、以前の試みと対照的である。これらの、以前の技法は、ドリフト値が非常に短い時間期間の間に測定され、したがって非常に信頼できないので、うまく動作しない。従来の解決策の少なくとも1つの重要な短所は、ソフトウェアクロック実装が、非常に短い時間期間にわたって測定されるドリフトより通常は2〜3桁大きいジッタを有することである。これは、しばしば、誤った不釣り合いに大きい反応につながり、これによって、オーディオレンダリング品質が大きく低下する。
クロックドリフトに対する比例したほぼ対称の訂正を提供するために、オーディオレンダリングレートを、十分に長い期間にわたって外部クロックに対して測定して、測定されたドリフトレート(測定されたレート)を作成するべきである。次に、測定されたレートを、オーディオハードウェア再生レートを調整することによるか、オーディオサンプリングレートを調整することによって(オーディオ再サンプリング技法を使用して)、後続のドリフト訂正に使用することができる。後者の技法は、前者の技法とほとんど同等である。それでも、オーディオ再サンプリングは、基礎になるオーディオハードウェアから独立であり、したがって、レート調整分解能および最大ハードウェアレートなどの可能なオーディオハードウェア制限を減らすか回避する。次の説明では、オーディオサンプリングレート調整技法を述べる。しかし、オーディオハードウェアが上で述べたものなどの制限を課さない場合のハードウェア再生レートの調整に適用可能なアルゴリズムを説明する。
上で説明したように、再生時に、ソフトウェアベースオーディオレンダリングプロセスは、ドリフトが第1閾値に達するまで、外部クロックに対するソフトウェアベースオーディオレンダクロックのドリフトを測定する。その後、このプロセスは、次の式を使用する。
ΔS×T=ΔT×S (1)
式(1)では、ΔSは、オーディオソースレートに、ソフトウェアベースオーディオレンダクロックと外部クロックの間のクロックレートの差を乗じたものであり、Tは、ドリフトが閾値を超えた時の時刻であり、ΔTは、閾値であり、Sは、オーディオサンプリングレートである。この2つのクロックの間の差のよい測定値をもたらすのに十分に大きいが、リップシンクが問題にならないのに十分に小さい閾値を選択するべきである。
したがって、外部クロックに従って、オーディオハードウェアは、レートSでオーディオを提示しており、ここで、
=S+ΔS (2)
である。
この式は、オーディオハードウェア再生レートに関する。オーディオハードウェア再生レートが、ソースオーディオレートにセットされている場合に、調整された再生レートは、ΔR=ΔT/Tである。
説明のために、ソフトウェアベースオーディオレンダクロックが、外部クロックより低速であると仮定するが、次の数式は、この仮定と独立である。この仮定に基づけば、ΔS<0である。ΔSは、非常に小さいものにすることができるので、次のアルゴリズムは、計算に整数算術および固定小数点算術を利用するように構成される。したがって、このプロセスは、値への右シフトをスケーリングする。現在の例では、8の右シフト値が利用されるが、これは、値に256を乗ずることと同等である。この右シフトによって、0.004Hzと小さいレートへのオリジナルオーディオのレート再サンプリングが可能になる。この点からこの例の終りまでで、すべてのS値を、256によってスケーリングされていると考える。
ソフトウェアベースオーディオレンダクロックが外部クロックより低速である場合に、例示的なソフトウェアベースオーディオレンダリングプロセスは、オリジナルサンプリングレートより低いレートにオーディオデータを再サンプリングする。したがって、このプロセスは、オーディオクロックドリフトの方向を逆転するために、オーディオハードウェアがより高いレートで再生しているように見えるようにする。より低いレートにオーディオサンプルを再サンプリングするときに、このプロセスは、サンプル期間中にある個数のサンプルを捨てるかデシメートする。
オーディオハードウェアは、まだ、サンプルレートでサンプルを消費する。しかし、オーディオハードウェアは、サンプル期間に関連する全コンテンツより少量を消費する。たとえば、オーディオソースレートが1kHzであると仮定する。したがって、1秒に1000個のサンプルが含まれる。オーディオハードウェアは、オーディオハードウェアクロックに従って、1秒に1000個のサンプルを処理すべきである。しかし、外部クロックに対して、オーディオハードウェアが、1秒に999個のサンプルしか処理できないと仮定する。このプロセスが、1秒分のコンテンツから1サンプルを捨てた場合に、オーディオハードウェアは、外部クロックの1秒の時間期間に、対応するコンテンツの999個のサンプルを消費するだけでよく、この999個のサンプルを消費するのにオーディオハードウェアが費やす時間は、正確に1秒である。
このアクションを行うことによって、効果的に、オーディオハードウェアが、外部クロックに従って1秒にコンテンツの1秒分を再生するようになる。もちろん、1000個のうちの1サンプルがユーザのために処理されないので、このコンテンツは正確に同一ではない。他のアルゴリズムを使用することもできるが、そのようなアルゴリズムは、この例で説明した挿入再サンプリングアルゴリズムより多くの処理リソースを利用する可能性がある。たとえば、3タップから5タップの有限インパルス応答(FIR)フィルタなどのローパスフィルタを使用する1次元信号レート再サンプリングアルゴリズムは、レート再サンプリングされたオーディオを作って、満足なユーザ経験を提供することができる。
人間の耳は、約30Hzと約20000Hzの間の周波数成分を有する音しか聞くことができない。ほとんどの人間の音声は、主に3000Hz未満である。人間の耳は、周波数が20000Hzに近付くにつれて、音にはるかに鈍感になる。ほとんどの消費者品質ディジタルオーディオは、主に説明を簡単にするために本明細書で選択された1000Hzではなく、44100ヘルツ(Hz)以上でサンプリングされる。これは、実際に偶然ではない。というのは、ナイキスト理論から、サンプリングされた音声信号が、サンプリングレートの半分未満の周波数を有するすべてのサウンドを再生できることが示されるからである。これは、44100Hzでサンプリングされたオーディオが、人間の可聴周波数範囲を十分に超える22050Hzまでの周波数成分を正確に再生できることを意味する。
外部ソースとのオーディオレンダリングの同期化の場合に、オーディオレンダハードウェアと外部ソースの間のクロック差は、多くとも数ヘルツであり、しばしば、1ヘルツの小さい分数である。したがって、数千個または数万個のオーディオサンプルの中からの単一のオーディオサンプルの単純な複製またはデシメーションを使用することは、消費者品質オーディオについて低域フィルタを使用することよりはるかに効率的であり、それとほぼ同等の品質を達成する。例として、44100Hzでディジタルサンプリングされたオーディオについて、オーディオサンプルは、23ミリ秒よりわずかに短い時間だけ続く。このプロセスが、数千サンプルのうちの1サンプルを捨てると仮定すると、このオーディオサンプルが、その隣接する近傍がその値に近い領域にあるか、その2つの隣接する近傍の一方または両方が、それと非常に異なるのいずれかである。前者の場合に、このサンプルを捨てることは、人間の感覚の観点から、波形のひずみをほとんど作らない。後者の場合に、捨てられるサンプルは、非常に短い時間の間に劇的に変化する非常に高周波の信号のサンプルであり、そのサンプルは、そもそも人間にほとんど可聴でない。
いくつかのコンフィギュレーションで、オーディオハードウェアが、たやすく読み取り可能な時刻を有しない場合がある。その代わりに、オーディオ時間を、その直接メモリアクセス(DMA)カーソル位置から導出することができる。DMAカーソルは、オーディオハードウェアが、オーディオドライバソフトウェアによって提供できるものなど、オーディオソフトウェアによって提供されるDMAバッファ内でオーディオサンプルを入手している場所をポイントする。これによって、オーディオドライバが、DMAカーソルが読み取られた時にオーディオハードウェアが何個のオーディオサンプルを処理済みであるかを判定できるようになる。オーディオ時間増分は、オーディオサンプルレートでオーディオハードウェアによって消費されたオーディオサンプルの個数から導出される。オーディオハードウェアが、オーディオサンプルレートSである量のオーディオサンプルΔAを消費した期間j中に、この期間内のオーディオ時間は、
δt=ΔA/S (3)
から計算される。したがって、動作状態に入ってからのソフトウェアベースオーディオレンダリングプロセスの総オーディオ時間は、
Figure 0005147180
である。したがって、式4は、すべてのjに関する式3の合計である。
この特定のアルゴリズムは、オーディオハードウェア再生レートを操作して、ソフトウェアベースオーディオレンダクロックと外部クロックの間のドリフトを、レート再サンプリングの使用に似た形で減らす。しかし、この特定のアルゴリズムでは、ハードウェアオーディオ再生レートが変更されるときに、オーディオハードウェアがオーディオサンプルを消費するレートが、物理的に変更される。オーディオレートが変更された直後のこの点まで、この点までに消費されたオーディオサンプルを読み取って、消費されたオーディオサンプルの量(ΔA)を判定する。ソフトウェアレート再サンプリングと同様に、式4を使用して、オーディオ時間を計算する。
しかし、測定されたレートが、まだある度合の誤差を有する場合がある。オーディオレート再サンプリング、特に高々32ビットの固定小数点計算を使用するものは、限られた精度を有する。その結果、計算丸め誤差が累積する可能性がある。同様に、外部クロックは、とりわけソフトウェア実行待ち時間のゆえに、2ミリ秒ほどの大きさになる可能性がある、ある量のジッタを有する。このソフトウェア待ち時間は、とりわけオペレーティングシステムおよび/または適用可能なアプリケーションプログラミングインターフェースによって引き起こされる待ち時間から生じる可能性がある。オーディオクロックと外部クロックの間の完全な同期点の周囲でゆっくり振動するようにこのアルゴリズムを構成することによって、このアルゴリズムは、これらの誤差を減らすか、これに免疫性になる。別の形で説明すると、オーディオレートは、
=S±δS (5)
である。ここで、δSは、S+δSを使用するときにオーディオクロックが外部クロックよりわずかに高速であることと、S−δSを使用するときにオーディオクロックが外部クロックよりわずかに低速であることと、次の条件が満足されることとを保証する最小の正の値である。この特定のアルゴリズムは、オーディオクロックが事前定義の閾値の正の値と負の値の間でドリフトするように構成される。順方向または正のドリフトで累積される誤差は、逆方向または負のドリフトで累積される誤差を打ち消す。したがって、このアルゴリズムは、累積誤差を減らすかなくす。したがって、正の閾値と負の閾値の間のドリフト時間が、固定小数点誤差累積が大きくなるのに十分に長くならないように値を選択することができる。
このプロセスがSを得た後のオーディオクロック時間は、δS=sign(ΔS)×ΔS/2によって計算される。ここで、2による除算は、整数値の右シフトと同等である。したがって、j<cの場合に、
=S+(−1)j+1×sign(ΔS)×δS (6)
かつ
δSj+1=δS/2 (7)
であり、j≧cの場合に、
δS=δS (8)
である。
j=0で、(−1)j+1×sign(ΔS)×δS>0であり、同等の再生レートは、外部クロックレートより高速である。したがって、オーディオクロックレートは、負の値から正の値に向かってドリフトする。オーディオ再サンプル間隔は、λであり、
λ=S/|S−S| (9)
から計算され、S>Sの場合の1デシメーションの剰余およびS<Sの場合の挿入は、
γ=1.0×S/|S−δS|−λ (10)
である。
再サンプリングプロセスは、固定小数点計算を使用して、サンプルを挿入するかデシメートする場所を見つける。jが増分されるときにAに0がセットされ、その点で、オーディオレンダプロセスが、再サンプリングレートをセットしてドリフト方向を反転すると仮定する。オーディオレンダプロセスが、L個のサンプルを含む新しいオーディオサンプルバッファを受け取るときは必ず、A=A+Lである。Aが、オーディオ再サンプル間隔(λ)以上である場合に、このプロセスは、Aからλを引き、A=A−λになる。ρが、累積した剰余であり、Aに0がセットされるときに0がセットされると仮定すると、このプロセスは、γにρを加算する。この点で、ρが、スケーリングされた1(この例では256)以上である場合に、このプロセスは、(A+1)番目のサンプルを挿入/デシメートし、ρ=ρ−256をセットする。そうでない場合に、このプロセスは、A番目のサンプルを挿入/デシメートする。このプロセスは、A<λになるまで継続する。その後、ソフトウェアベースオーディオレンダリングプロセスは、次のオーディオサンプルバッファがオーディオデコーダから来るのを待つ。このプロセスは、オーディオレンダリングプロセスが、たとえばjをもう一度増分するなど、ドリフト方向をもう一度反転すると判断するまで繰り返される。
いくつかの実施形態で、式6を用いて、このプロセスは、j=0で開始され、オーディオクロックレートが、負の値から0に向かう。この点で、このプロセスは、閾値として最大ドリフト値をセットする。このプロセスは、このプロセスがドリフト方向の反転を開始するときに、オーディオが閾値をわずかに超えてドリフトし続けることを可能にするように、閾値マージンも与えられる。これは、前のレート(j−1)で再サンプリングされたオーディオデータが、この時にオーディオハードウェアによって完全に消費されない場合があるからである。オーディオが、新たに最終的にセットされた最大ドリフト値以上の正の値までドリフトしたならば、このプロセスは、jを1の値まで増分する。この点で、オーディオ再生レートは、Sより遅く見える。オーディオは、負の値に向かってドリフトし始める。δSの値は、δSの値の半分なので、ドリフトが要する時間は、負の閾値までドリフトする時間の約2倍である。このプロセスは、jの増分がもはやドリフト方向を反転しなくなるまで繰り返され、ドリフト方向を反転しないことは、増分値が、オーディオクロックのソフトウェア実装によって導入される誤差の補償に十分でないことを意味する。上のプロセスがドリフト方向の反転に失敗する時には、c=j−1が、このプロセスがδSを減らすことを試みる最後の時であり、収束値δSに達している。
最初に述べたように、このプロセスは、あるタイムスパン、たとえば15分までに、正の閾値と負の閾値の間または疎の逆のオーディオクロックドリフトに制限を設けて、このアルゴリズムがさまざまなソースからの影響の累積に免疫性になるようにもする。これによって、前の段落で説明したδSに達する前のある状況でのδSの最小値を効果的に定めることができる。これは、このプロセスが、たとえばδSがもはや半分にされないように、タイムスパンが15分を超えるときにc=jをセットすることを意味する。ΔSが極端に小さい場合に、δSをδSより大きく、2×δSなどにしなければならない場合がありえる。もう1つの条件は、最大サンプリング間隔を、231≧S/|S−S|までに制限し、その結果、必ず、32ビット固定小数点計算をオーディオレート再サンプリングに使用できるようにすることである。式2および6に基づいて、δSの最小値に対する制限を定めることもできる。δSを、δSより大きく、2×δSなどにしなければならない場合がありえる。
要約すると、この実装について、測定されたレートからの調整されたレート変更またはレート変更デルタは、オーディオクロックが外部クロックに対してプラスおよびマイナスの値の閾値の間で継続的にドリフトすることを可能にすると同時に、オーディオクロックが、たとえば負の閾値と正の閾値の間でドリフトするのに要する時間が長いが長すぎない、最小の値にするべきである。たとえば、他の値の間でも、約1分から1時間以上のの期間が、適切な実装を提供することができる。収束レート調整デルタの判断基準を利用して、オーディオクロックが外部クロックと完全に同期して見えるが、その状態が実際にはソフトウェアクロック実装の不完全性から生じる状況に対して保護する。上で述べたほとんど対称の訂正は、最終的なレート調整デルタが決定される時に、オーディオクロックが負の閾値から正の閾値にドリフトする時間が、オーディオクロックが正の閾値から負の閾値にドリフトするのに要する時間とほぼ同一であることを意味する。
例示的なビデオレンダリング実装
ディスプレイサイクルを説明するために、図1および5を集合的に検討されたい。図5に、それぞれ全般的に502、504、および506の、ソフトウェアベースビデオレンダリングエンジン124によって追跡される3つの連続するビデオフレームAA、BB、およびCCのディスプレイサイクルのタイムライン500を示す。タイムライン500では、時間が左から右に進行する。タイムライン500の左端領域に示されているように、現在のフレームAAのディスプレイサイクルが、全般的に502に示されている。上で述べたように、ディスプレイサイクルには、2つのスキャニングサイクルまたはVBIサイクルが含まれ、偶数フィールドが第1VBIサイクルにスキャンされ、その後、奇数フィールドが第2VBIサイクルにスキャンされる。各VBIサイクルは、イメージ生成に寄与しないVBIイベントで最高点に達する。
VBIイベント508Aは、ディスプレイサイクル502の終りおよびフレームBBのディスプレイサイクル504の始めを画定する。ディスプレイサイクル504に、第1VBIサイクルすなわち偶数VBIサイクル510と、第2VBIサイクルすなわち奇数VBIサイクル512が含まれる。ディスプレイサイクル504がフレームBBからのイメージを正しく表示するために、そのフレームが、VBIイベント508Aの直前に、レンダリングのためにグラフィックスハードウェアから使用可能になっているべきである。
レンダリングプロセスを、時々、サーフェスフリッピング(surface flipping)またはフリップフロッピング(flip−flopping)と称し、ここで、新しいフレームBBが、グラフィックスハードウェアによるアクセスのためにバックバッファサーフェスからフロントバッファサーフェスにフリップされると同時に、現在のフレームAAが、これに対応してフロントからバックにフリップされる。
フレームBBのディスプレイサイクル504は、VBIイベント508Bで最高点に達する偶数VBIサイクル510と、VBIイベント508Cで最高点に達する奇数VBIサイクル512からなる。VBIイベント508Bに応答して、後続フレームCCがレンダリングされ、その結果、このフレームCCをディスプレイサイクル506にスキャンできるようになるが、このフレームの偶数VBIサイクルだけが、図5に表されている。
標準規格に従って、TVエンコーダ128は、16.67msという定義されたスキャニングサイクルすなわちVBIサイクルを厳守する。TVエンコーダは、このサイクルから意図的に逸脱はせず、他のシステムコンポーネントの動作を考慮に入れない。たとえば、TVエンコーダは、個々のVBIサイクルを短縮または延長する裁量を有しない。各ディスプレイサイクルに、2つのVBIサイクルすなわち33.34msが含まれる。グラフィックスハードウェア126およびTVエンコーダ128のVBIサイクルは、TVエンコーダクロックまたはグラフィックスハードウェアのグラフィックスクロック(具体的には図示せず)のいずれかに関して維持される。
ソフトウェアベースレンダリングエンジン124に、ソフトウェアベースレンダリングクロック(具体的には図示せず)を含めることができる。TVエンコーダ128および/またはグラフィックスハードウェア126のディスプレイサイクルを監視することによって、レンダリングエンジン124のレンダリングクロックは、TVエンコーダのディスプレイサイクルに関してイベントをスケジューリングすることができる。ディスプレイサイクルを監視するプロセスの一例を、以下で図7A〜7Bに関して説明する。
図1に示されているように、ソフトウェアベースビデオレンダリングエンジン124は、コンピューティングデバイス102の内部または外部とすることができるソースからビデオフレームを受け取る。このビデオフレームに、外部クロックまたはソースクロックなどの基準クロックによって確立されたプレゼンテーション時刻またはタイムスタンプを含めることができる。タイムスタンプを作成する外部クロックは、TVエンコーダのディスプレイサイクルを知らず、グラフィックスハードウェアのクロックさえも知らない。ソフトウェアベースビデオレンダリングエンジン124は、グラフィックスハードウェア126のディスプレイサイクルを監視して、グラフィックスハードウェアのディスプレイサイクルに関してフレームを表示できる実際の時刻を予測する。次に、ビデオレンダリングエンジン124は、この予測に基づいて、ビデオフレームをビデオハードウェアにいつレンダリングするかを決定する。さらに、ソフトウェアベースビデオレンダリングエンジンは、この予測に基づいてレンダリングをスケジューリングすることができるが、ソフトウェアベースビデオレンダリングエンジンは、ディスプレイサイクルの監視を継続して、ビデオフレームが適当な時にレンダリングされることを保証する。
図6に、レンダリングエンジン124が個々のビデオフレームの実際のプレゼンテーション時刻を決定する、1つの例を示す。タイムライン600が、100msの持続時間について示されている。このタイムラインは、単一のVBIサイクルに関連する16.67msの増分で区切られている。2つのVBIサイクルの連続するセット(または33.34ms)が、1つのディスプレイサイクルを画定し、3つのディスプレイサイクル604、606、および608が、この例に示されている。第1ディスプレイサイクル604は、ビデオフレームDDを表示する。第2ディスプレイサイクル606は、第2ビデオフレームEEを表示し、第3ディスプレイサイクル608は、第3ビデオフレームFFを表示する。
ビデオフレームEEは、20ミリ秒のプレゼンテーションタイムスタンプ610を有する。説明のために、このタイムスタンプを確立したクロックが、ディスプレイサイクルと同期化されていると仮定する。TVエンコーダのディスプレイサイクルの監視から、ソフトウェアベースレンダリングエンジン124は、ビデオフレームDDが、0.0msから33.34msまでスキャンされ、したがって、ビデオフレームEEの実際のプレゼンテーションをこの時の後になるまで開始できないことを知る。したがって、ソフトウェアベースレンダリングエンジンは、ビデオフレームEEの実際のプレゼンテーション時刻を、33.35msから始まり、66.67msまで続く次のディスプレイサイクル606にするべきであることを知る。
同様に、ビデオフレームFFは、40msのプレゼンテーション時刻612を有する。ソフトウェアベースレンダリングエンジンは、次に使用可能なディスプレイサイクル608が、66.68msに始まり、したがって、実際のプレゼンテーション時刻がその後に始まることを知る。レンダリングエンジンは、ディスプレイサイクル606の第2の半分にビデオフレームFFをレンダリングするようにスケジューリングすることができる。ソフトウェアベースレンダリングエンジンは、望ましくない結果が作られる可能性があるので、ディスプレイサイクル606の第1の半分がタイムスタンププレゼンテーション時刻612により近い場合であっても、ディスプレイサイクル606の第1の半分にフレームFFをレンダリングするようにはスケジューリングしない。そのような望ましくない結果を、図7A〜7Bに関して以下で詳細に説明する。
図6に、ソフトウェアベースビデオレンダリングエンジンが、どのようにして個々のビデオフレームの実際のプレゼンテーション時刻を決定し、それに従ってこれらをレンダリングできるかが示されている。さまざまなシステムコンフィギュレーションが、レンダリング側および/またはグラフィックスハードウェア側のある度合の待ち時間を有する場合がある。この待ち時間は、さらに正確な実際のプレゼンテーション時刻を計算し、かつ/またはレンダリング時刻をスケジューリングするために、いくつかの実装によって計算に入れられる。ソフトウェアベースビデオレンダリングエンジンは、個々のビデオフレームの実際のレンダリング時刻をオーディオデコーダ114および/またはオーディオレンダリングエンジン116に通信することもでき、その結果、オーディオレンダリング時刻をそれ相応に調整できるようになる。
上で説明したように、ソフトウェアベースビデオレンダリングエンジンは、望まれる場合に、ディスプレイサイクルを監視して、個々のビデオフレームのレンダリング時刻および/またはプレゼンテーション時刻を決定することができる。ソフトウェアベースビデオレンダリングエンジンは、ビデオフレームをレンダリングする直前までディスプレイサイクルからVBI信号などのリアルタイム信号を入手し続けるので、これらの所定の値に頼る必要がない。いくつかの実装は、最終的に、所定の時間ではなくリアルタイム信号に基づいてビデオフレームをレンダリングすることができる。
ビデオハードウェアのディスプレイサイクルに従ってビデオフレームをレンダリングすることによって、結果のモーションビデオのユーザ経験の質を高めることができる。ビデオフレームをいつレンダリングするかを決定するためのディスプレイサイクルの監視の例示的なプロセスを、以下で図7A〜7Bに関して説明する。
例示的なビデオレンダリングプロセス
図7A〜7Bは、ビデオデータをレンダリングするソフトウェアベースプロセスを表す。この特定の実装は、national television standards committee(NTSC)によって確立された、他の国の中でも米国で利用されている標準規格に基づく。以下で説明する概念は、とりわけ、欧州で利用されているphase alternating line(PAL)、ディジタル多用途ディスク(DVD)、および480pなどの他の標準規格に適用可能である。1つのコンフィギュレーションで、このプロセスを、図1および2に関して説明したものなどのシステムを使用して実装することができる。説明されるソフトウェアベースビデオレンダリングプロセスに、動作702〜734が含まれる。動作702〜724は、全般的に、ビデオレンダリングプロセスに関し、動作726〜734は、全般的に、外部クロックとレンダリングプロセスクロックの間の潜在的なクロックドリフトへの対処に関する。このソフトウェアベースビデオレンダリングプロセスは、動作702のスタートアッププロセスで開始される。
動作702で、このソフトウェアベースビデオレンダリングプロセスは、メディアプレイヤアプリケーションがユーザによって開かれることに応答して、ビデオレンダリングエンジンスレッドを作成する。次に、このプロセスは、ユーザからの再生コマンドなど、実行イベント信号を待つ。グラフィックスハードウェアは、VBIサイクリング中に特定の割込み信号線に出会ったときに、割込み信号を生成する。この割込み信号が、CPUに割り込む。それに応答して、CPUが、割込み信号の発生およびそれを生成した割込み信号線を記録する。CPUは、割込み信号をドライバ割込みハンドラに配信する。CPUは、待機中スレッドキューを調べ、CPUが、その割込み信号を待っているスレッドを識別した場合に、CPUは、識別されたスレッドを待機中スレッドキューからレディスレッドキューに移動する。この例では、レンダリングエンジンスレッドが、割込み信号を待っており、レディスレッドキューに移動される。次に、CPUは、現在動作中のスレッドに対してビデオレンダリングエンジンスレッドの優先順位を調べ、ビデオレンダリングエンジンスレッドが優先順位を有する場合に、CPUは、ビデオレンダリングエンジンスレッドを実行し、現在のスレッドをレディキューに移動する。次に、このプロセスは、最初のビデオサンプルまたはフレームがビデオデコーディングプロセスから到着するのを待つ。
動作704で、ソフトウェアベースビデオレンダリングプロセスから使用可能なビデオフレームがバッファに到着した時に、このプロセスは、システムが新しいフレームの準備ができているかどうかを問い合わせる。この動作は、このプロセスが、システムの動作状態を検査して、ビデオフレームが実際に望まれていることを保証することを可能にする。この動作は、処理能力および/または他のリソースが浪費される機会を減らす。たとえば、ユーザが、「再生」を押したが、このプロセスがこの点に達した時までに、ユーザが「一時停止」を押す場合があり、あるいは、ユーザが、チャネルを変更しており、これによって、ビデオフレームをレンダリングする必要がなくなる場合がある。この例では、ユーザが一時停止を押した場合に、システムは、新しいフレームの準備ができていない。ビデオフレームが望まれない場合には、このプロセスは動作702に戻る。
ビデオフレームが望まれている場合に、ソフトウェアベースビデオレンダリングプロセスは、VBIサイクルのVBI極性を獲得する(動作706)。VBIサイクルは、ハードウェアサブシステムで発生し、このハードウェアサブシステムは、ディスプレイデバイスと共同で動作して、所与のビデオフレームからイメージを作る。各ビデオフレームは、あるディスプレイサイクルに表示され、このディスプレイサイクルは、2つのVBIサイクルからなる。第1VBIすなわち偶数VBIは、ビデオフレームの偶数フィールドをスキャンする。第2VBIすなわち奇数VBIは、ビデオフレームの奇数フィールドをスキャンする。VBI極性を獲得することによって、このプロセスは、個々のフレームのディスプレイサイクルが、第1VBIサイクルまたは第2VBIサイクルのどちらであるかを知る。ディスプレイサイクルおよびVBIサイクルの例は、上で図2〜3に関して説明した。
説明のために、このプロセスが、奇数VBI極性を獲得すると仮定する。奇数VBI極性を獲得することによって、このプロセスは、現在のフレームの第2フィールドがTVエンコーダ128によってスキャンされつつあることを知る。
動作708で、ソフトウェアベースビデオレンダリングプロセスは、次のVBI信号を待つ。上で説明したように、VBIイベントは、VBIサイクルの終りに発生し、VBIサイクルの垂直帰線消去フェーズの始めを示す。グラフィックスハードウェアは、各VBIイベントにおいてVBI信号を作成し、このVBI信号が、ソフトウェアベースビデオレンダリングエンジンによって検出される。偶数フィールドのスキャンの終りでのVBI信号の受取は、次のVBIサイクルが奇数極性を有することを示す。同様に、奇数フィールド後のVBI信号の受取は、次のVBIサイクルが偶数極性を有することを示す。したがって、VBI信号の受取時に、偶数VBIサイクルを奇数VBIサイクルから分離することによって、現在のフレームのディスプレイサイクルが次のVBI信号の直前に完了することが示される。VBI極性を獲得し、VBI信号を待つことによって、ソフトウェアベースビデオレンダリングプロセスは、近付きつつある奇数VBIサイクルに次のフレームをレンダリングするようにスケジューリングすることができる。
動作710で、ソフトウェアベースビデオレンダリングプロセスは、VBIサイクルを追跡する。VBIサイクルを追跡することによって、このプロセスが、獲得に単一VBIサイクルより長い時間を要する可能性があるVBI極性を再確認する必要がなくなる。まずVBI極性を獲得し、次にVBIサイクルを追跡することによって、ソフトウェアベースビデオレンダリングエンジンは、ビデオレンダリングエンジンのビデオレンダリングクロックに対する各ディスプレイサイクルの点を知る。他の利益の中でも、この特徴は、ソフトウェアベースビデオレンダリングエンジンが、現在のフレームの偶数サイクルがスキャン済みであるときに限って新しいフレームをレンダリングする可能性を回避することを可能にすることができる。そのような技法がない、いくつかの既存のプロセスは、偶数フィールドVBIサイクル中に新しいフレームがレンダリングされるようにスケジューリングされ、現在のフレームの第2サイクルまたは奇数サイクルが省略され、新しいフレームがその代わりにスキャンされるというシナリオにつながる可能性がある。そのようなシナリオは、より不満足なユーザ経験につながる可能性がある。そのような場合に、新しいフレームが、時間的に逆の順序でスキャンされる可能性がある。たとえば、偶数フィールドとその後に奇数フィールドではなく奇数フィールドとその後に偶数フィールドになり、これは、ユーザの満足をさらに減らす可能性がある。
さらに、VBIサイクルを追跡することによって、ソフトウェアベースビデオレンダリングエンジンは、各VBIサイクルが正確に16.67msを要するので、グラフィックスクロックに基づいて、それ相応にビデオレンダリングクロックを更新することができる。したがって、たとえば、VBI信号が検出されるたびに、ビデオレンダリングクロックを、それ相応に上に移動することができる。これによって、レンダリングプロセスが、そのアクティビティのタイミングをディスプレイサイクルとより正確に合わせることが可能になる。たとえば、ソフトウェアレンダリングエンジンがあるVBIサイクルに完了する他のタスクを設けることができる。
その代わりにまたはそれに加えて、各VBIイベントの検出時にビデオレンダリングクロックを更新し、そのビデオレンダリングクロックを基準クロックの時間と比較することによって、グラフィックスクロックと基準クロックの間のクロックドリフトを減らすこともできる。
以下で詳細に述べるように、動作710のクロック同期化プロセスは、ソフトウェアベースビデオレンダリングプロセスを、地上波、ケーブル、および衛星ソースなどの標準TV放送媒体からのライブビデオソースクロックに従属させることを可能にすることができる。
また、以下で詳細に述べるように、正確なビデオレンダクロックを保つことによって、ソフトウェアベースビデオレンダリングプロセスが他のコンポーネントおよび/またはプレゼンテーションを同期化することが可能になる。たとえば、ソフトウェアベースビデオレンダリングプロセスは、イメージが所与のビデオフレームから生成される実際の時を決定することができる。
ソフトウェアベースビデオレンダリングプロセスは、次に、実際のプレゼンテーション時刻を利用して、オーディオビジュアル不一致を減らすことができる。たとえば、ソフトウェアベースビデオレンダリングプロセスは、ビデオフレームの実際の表示時刻をオーディオデコーダおよび/またはオーディオレンダリングエンジンに通信することができ、その結果、オーディオ態様およびビジュアル態様を同期化できるようになる。
たとえば、現在のフレームの奇数フィールドの始めにVBI信号を受け取った時に、ソフトウェアベースビデオレンダリングプロセスは、約16.67msで次のVBI信号を受け取った時に次のフレームをレンダリングすることを知る。ソフトウェアベースビデオレンダリングプロセスは、次のフレームのスキャンがその時点で開始されることも知る。したがって、ソフトウェアベースビデオレンダリングプロセスは、オーディオレンダリングエンジンに、関連するオーディオパケットを16.67ms後にレンダリングするように指示することができる。そのような同期化プロセスは、人間の知覚をはるかに下回る明確な上限以内のオーディオビデオ同期化を作ることができる。
動作712で、ソフトウェアベースビデオレンダリングプロセスは、システムが新しいフレームの準備ができているかどうかをもう一度検査する。このステップでは、システムの動作状態を検査して、リソースが不必要なレンダリングに浪費されないことを保証する。システムが、次のフレームの準備ができていない場合(すなわち、「No」分岐)、このプロセスは、システムの準備ができるまで待つ。システムの準備ができたならば(すなわち、「Yes」分岐)、ソフトウェアベースビデオレンダリングプロセスがレンダリングサイクルであるかどうかを判定する(動作714)。たとえば、ソフトウェアベースビデオレンダリングプロセスは、それが次の33.34msでフレームをレンダリングするようにスケジューリングされているか否かを調べるために検査することができる。そのようなスケジューリングの一例を、上で図3に関して説明した。
この動作は、他の属性の中でも、改善されたリソース割り当てを考慮に入れることができる。ソフトウェアベースビデオレンダリングプロセスが、ビデオレンダリングサイクルである量のリソース、特にグラフィックスハードウェアリソースを予約する望みを予測した場合に、ソフトウェアベースビデオレンダリングプロセスは、それのために予約されたリソースを保持する。ソフトウェアベースビデオレンダリングプロセスが、所与のレンダリングサイクルにビデオレンダリングを完了した場合に、ソフトウェアベースビデオレンダリングプロセスは、その予約された処理リソースの一部を他のプロセスに利用させることができる。ディスプレイサイクルおよび/またはVBIサイクルを追跡することによって、ソフトウェアベースビデオレンダリングプロセス用に予約された処理リソースを他の処理タスクに再割り当てできる時が生じる場合がある。VBIサイクルを追跡し、ビデオレンダリングクロックを更新することによって、ソフトウェアベースビデオレンダリングプロセスが、リソースをソフトウェアベースビデオレンダリングプロセスのために予約すべきときと、これらが他の処理タスクから使用可能であるときとを知ることが可能になる。
たとえば、ソフトウェアベースビデオレンダリングプロセスが、レンダリングVBIサイクルでサーフェスフリップをスケジューリングできる前に、特定の動作タスクを実行するために特定のグラフィックスハードウェアユニットを必要とすると仮定する。サーフェスフリッピングは、上で図2に関して説明した。さらに、ユーザインターフェース(UI)モジュールなどの他のモジュールが、同一のグラフィックスハードウェアユニットを使用すると仮定する。ソフトウェアベースビデオレンダリングプロセスは、レンダリングプロセスに優先順位を与え、その結果、レンダリングプロセスが、そのタスクを遅れずに完了できるようにする。レンダリングプロセスがそのスケジューリングされたタスクを完了したならば、UIモジュールなどの他のコンポーネントが処理リソースを利用することを許可することができる。
ソフトウェアベースビデオレンダリングプロセスがその処理タスクをタイムリーに達成できることを保証する技法の1つが、ソフトウェアベースビデオレンダリングプロセスが、グラフィックスユニットにタスクを発行することを望む他のソフトウェアモジュールにグラフィックスユニットへのアクセスを与えるか拒否することを可能にすることである。たとえば、ソフトウェアベースビデオレンダリングプロセスは、ソフトウェアベースビデオレンダリングプロセスが予約すべきグラフィックスユニットリソースの比率を測定することができる。ソフトウェアベースビデオレンダリングプロセスが、グラフィックスユニットのリソースの100%を必要とする極端な場合に、ソフトウェアベースビデオレンダリングプロセスは、レンダリングVBIサイクルが満了する前に、ソフトウェアベースビデオレンダリングプロセスがサーフェスフリップのスケジューリングに成功するためにグラフィクスユニットのリソースの100%を有するべき最後のタイムスパンを判定することができる。したがって、ソフトウェアベースビデオレンダリングプロセスは、他のソフトウェアモジュールによるグラフィックスユニットの使用をそれ相応に制限またはゲーティングすることができる。たとえば、ソフトウェアベースビデオレンダリングプロセスは、ソフトウェアベースビデオレンダリングプロセスがサーフェスフリップをスケジューリングした直後にリソースゲートをオンにするが、将来のある時までUIモジュールがグラフィックスユニットのある比率だけを使用することを許可することができる。次に、ソフトウェアベースビデオレンダリングプロセスは、スケジューリングされたすべてのタスクがレンダリングVBIサイクル内へのある時間の前に完了するように、他のソフトウェアモジュールへのリソースゲートをオフにし、その結果、ソフトウェアベースビデオレンダリングプロセスがスケジューリングできるタスクを、十分な安全マージン付きで完了できて、ソフトウェアベースビデオレンダリングプロセスがレンダリングVBIサイクル満了の前にサーフェスフリップをスケジューリングすることを可能にする。
ソフトウェアベースビデオレンダリングプロセスが、レンダリングサイクルでない場合に、このプロセスは、動作716に進む。プロセスがレンダリングサイクルである場合に、このプロセスは動作718に進む。
動作716で、ソフトウェアベースビデオレンダリングプロセスは、フリップされたサーフェスすなわち前にスキャンされたフレームを解放する。前に述べたように、バックサーフェスにアタッチされたメモリバッファが、フロントサーフェスのメモリバッファとスワップされることに留意されたい。したがって、このプロセスは、現在のバックサーフェスを、それにアタッチされたバッファと共にバッファキューに解放することができる。ビデオデコーダは、プレゼンテーションタイムスタンプの順序で、新たにデコードされたビデオフレームをバッファに書き込むために、解放されたバッファを獲得することができる。そのようなバッファは、図1ではビデオバッファ122Bとして指定されている。この時点で、このプロセスは動作708に進む。
動作718では、ソフトウェアベースビデオレンダリングプロセスがレンダリングVBIサイクルであるが、このプロセスは、次のフレームが使用可能であるかどうかを検査する。いくつかのコンフィギュレーションで、次のビデオフレームは、図1に関して説明したフレームバッファ122AなどのバッファFIFOからの獲得および消費のために、ソフトウェアベースビデオレンダリングプロセスから使用可能になっているべきである。この特定のFIFOバッファキューは、フレームプレゼンテーションタイムスタンプに従う時間順でソフトウェアベースビデオデコーディングプロセスによって書き込まれる。1つのシナリオで、ソフトウェアベースビデオデコーディングプロセスは、1つまたは複数のフレームをデコード済みであり、図1に関して説明したビデオバッファ122Bから獲得されたバッファにこれらを書き込み済みであり、ソフトウェアベースビデオレンダリングエンジンによる受取のために図1のビデオバッファ122Aにビデオフレームを配置済みである。もう1つのシナリオでは、グリッチが、ソフトウェアベースビデオデコーディングプロセスが遅れずに次のビデオフレームを配信することを妨げる場合がある。この後者の状況が発生し、次のビデオフレームが、VBIレンダリングサイクル中に使用可能でない場合には、ソフトウェアベースビデオレンダリングプロセスは、動作720に進む。次のフレームが使用可能である場合には、ソフトウェアベースビデオレンダリングプロセスは、キューからそれをとり、動作724に進む。
動作720では、ソフトウェアベースデコーディングプロセスが、遅れずにビデオフレームを配信しないので、ソフトウェアベースビデオレンダリングプロセスは、現在表示されているビデオフレームの表示を1つまたは複数のVBIサイクルにわたって延長する。1つの手法は、現在のフレームを2つのVBIサイクルすなわち約34msだけ延長することである。このプロセスは、次に、動作722に進む。
動作722では、ソフトウェアベースビデオデコーディングプロセスがロスを埋め合わせることを可能にし、デコーディングプロセスが追い付くことを可能にするために、ソフトウェアベースビデオレンダリングプロセスが、後続ビデオフレームを捨てるようにデコーディングプロセスに指示する。
処理リソースは、ソフトウェアベースビデオデコーディングプロセスが、遅れたフレームについて補償するために捨てられる後続フレームを選択できるようにすることによって節約することができる。たとえば、圧縮ビデオストリームに、基準フレームおよび非基準フレームが含まれると仮定する。ソフトウェアベースビデオデコーディングプロセスは、すべての基準フレームをデコードしなければならず、これらの基準フレームは、他のフレームをデコードするのに使用される。したがって、デコーディングプロセスは、非基準フレームをデコードしないことを選択することができる。通常、非基準フレームは、デコードに数倍多いシステムリソースを要する。1つまたは複数の非基準フレームが、通常、2つの基準フレームの間に存在する。したがって、非基準フレームをデコードしないことによって、ソフトウェアベースビデオデコーディングプロセスは、2フレーム時間以内に追い付くことができる。たとえば、次にデコードされるフレームが非基準フレームである場合に、ビデオデコーダは、そのフレームを捨てることができる。次のフレームが基準フレームである場合に、それに続くフレームは、非基準フレームであるべきであり、ビデオデコーダは、そのフレームを捨てることができる。これによって、表示されるビデオフレームのプレゼンテーションタイムスタンプが、対応するレンダリングされるオーディオサンプルのプレゼンテーションタイムスタンプから、2つ以下のディスプレイサイクルについて34ms以下だけずれることが許容され、その後、オーディオとビデオを再同期化することができる。
具体的な例として、MPEG−2/4/10またはWMV9ビデオなどの標準規格ベースのビデオ圧縮のメインプロファイルに、B(両方向予測)フレームが含まれるが、Bフレームは他のフレームを構築するための基準フレームとして使用されないので、Bフレームをデコードする必要はない。また、Bフレームは、他のフレームタイプと比較したときに、デコードにより多くのシステムリソースを要する。したがって、ソフトウェアベースビデオデコーディングプロセスは、動作722のフレームを捨てるコマンドを受け取った後に最初に出会うBフレームをデコードしないことを選択することができる。
図7Aに示されていない代替の手法が、もう1つのVBIサイクルだけ表示について現在のフレームを延長し、次のVBIサイクルをレンダリングサイクルと指定することである。新しいビデオフレームが次のVBIサイクルに使用可能である場合に、その新しいフレームが、1VBIサイクルだけ表示される。この方式は、次の4VBIサイクル内の動作720の発生ごとに1回に制限することができる。単一の発生の後に、現在のフレームを、動作720で説明したようにもう2VBIサイクルだけ表示して、ビデオデコーディングプロセスが追い付けるようにすることができる。
動作722の代替のシナリオで、ソフトウェアベースビデオレンダリングプロセスが、スケジューリングされたレンダ時刻の後に次のビデオフレームを受け取り、次のディスプレイサイクルが現在のフレームでもう一度開始された場合に、ソフトウェアベースビデオレンダリングプロセスは、そのディスプレイサイクルがディスプレイサイクルの前半であるかどうかを判定する。次のビデオフレームが、ディスプレイサイクルの前半すなわち第1VBIサイクルまたは偶数VBIサイクル中に受け取られた場合に、このプロセスは、遅れて到着したフレームをレンダリングし、ビデオフレームが遅れずにレンダリングされたかのように動作730に進む。このプロセスステップは、デコーダから遅れて到着するフレームをそのディスプレイサイクルの後半に表示することを可能にする。動作722で、ビデオデコーダにフレームを捨てるように指示する場合には、ソフトウェアベースレンダリングプロセスは、動作708に進む。
動作724で、ソフトウェアベースビデオレンダリングプロセスが、次のビデオフレームを入手する。
動作725で、ソフトウェアベースビデオレンダリングプロセスは、次のビデオフレームが前のフレームと連続しているかどうかを検査する。ソフトウェアベースビデオレンダリングプロセスは、前のフレームのプレゼンテーションタイムスタンプに関して、動作724で入手されたビデオフレームのプレゼンテーションタイムスタンプの連続性を検査する。この検査では、動作722によって引き起こされた不連続性のすべてが除外される。不連続性が存在する場合に、ソフトウェアベースビデオレンダリングプロセスは、動作726に進む。フレームが連続的である場合に、ソフトウェアベースビデオレンダリングプロセスは、動作728に進む。
動作726では、不連続性が存在するので、ソフトウェアベースビデオレンダリングプロセスは、前のフレームのプレゼンテーションタイムスタンプと次のフレームのプレゼンテーションタイムスタンプの間の差まで、現在のフレーム表示時間を延長する。
次のフレームと前のフレームの間のそのような不連続性を引き起こすことができる例の1つが、ソフトウェアベースビデオレンダリングプロセスを用いる、DVDムービーなどのDVD再生の文脈で発生する可能性がある。そのような例では、DVDメニューが、ムービーのビデオストリーム内でユーザのために表示される場合がある。そのようなシナリオの1つで、メニューが、ユーザコマンドによって呼び出され、かつ/または除去される。たとえば、ユーザが、再生の「一時停止」を選択した場合に、メニューを表し、一時停止状態を表すフレームを、ビデオストリームにビデオフレームとして挿入することができる。したがって、DVDメニューは、ムービーのビデオストリームの一部ではない。さらに、ムービーのビデオフレームは、ソースによって挿入されたタイムスタンプを有する。メニューには、タイムスタンプが含まれる場合とそうでない場合がある。メニューがタイムスタンプを有しない場合に、ムービーフレームのタイムスタンプに対する相関がほとんどまたは全くない可能性が高い。したがって、メニューがビデオストリームに挿入されるか除去されるたびに、不連続性が生じる。DVDメニューが、ユーザによって呼び出された場合にいつでも表示される可能性があることに留意されたい。さらに、ユーザがいつでも選択を行うことができるので、1つの静止フレームがどれだけ長く表示されるかを正確に判断することも困難である。ユーザが、前の再生状態を再開した場合に、メニューフレームが除去され、ビデオストリームの別の不連続性が生じる可能性がある。次フレームの表示時間を延長した後に、ソフトウェアベースビデオレンダリングプロセスは、動作708に戻る。
動作728で、ソフトウェアベースビデオレンダリングプロセスが、次のビデオフレームのレンダリングをスケジューリングする。次のフレームをレンダリングする動作は、次のフレームバッファを含むサーフェスをフリップすることによって達成することができる。
上で説明したソフトウェアベースビデオレンダリングプロセスステップは、プロセスステップ704〜708を介してディスプレイサイクルを監視する。次に、ソフトウェアベースビデオレンダリングプロセスは、現在のフレームの奇数フィールドのスキャンの最高点で生成されたリアルタイムVBI信号を受け取った時に、使用可能であれば次のフレームをレンダリングする。レンダリングプロセスは、まさにこのとおりである必要はない。他の例示的なプロセスは、ディスプレイサイクルを監視し、現在のフレームのディスプレイサイクルが半分以上完了した後のいつにでも次のフレームをレンダリングすることができる。上で図2に関して説明したように、現在のフレームのフィールドがスキャンのためにフリップされたならば、次のフレームをレンダリングすることができ、ビデオハードウェアは、次のディスプレイサイクルまでそれをスキャンしない。したがって、たとえば、あるソフトウェアベースビデオレンダリングプロセスは、下流コンポーネントが現在のディスプレイサイクルの第2の半分を開始したことを確かめるや否や、次のフレームをレンダリングすることができる。
動作728の後に、ソフトウェアベースビデオレンダリングプロセスは、動作708に戻る前に、動作730で開始されるクロック同期化サブルーチンに進んで、レンダリングプロセスを繰り返す。動作730で、ソフトウェアベースビデオレンダリングプロセスは、ビデオレンダクロック時間と基準クロックの間の差を計算する。基準クロックとビデオレンダクロックの比較は、上で動作710に関して説明した。ビデオレンダクロック時間と基準クロック時間の間の差の絶対値が、フレームディスプレイサイクル持続時間未満である場合には、ソフトウェアベースビデオレンダリングプロセスは、動作708に進む。
ビデオレンダクロック時間と基準クロック時間の間の差が、ビデオフレームディスプレイサイクルより大きい正の値である(これはビデオレンダクロックまたはグラフィックスハードウェアクロックが基準クロックより速いことを示す)場合に、ソフトウェアベースビデオレンダリングプロセスは、動作732に進む。
ビデオレンダクロック時間と基準クロック時間の間の差が、ビデオフレームディスプレイサイクルより大きい負の値である(これはビデオレンダクロックまたはグラフィックスハードウェアクロックが基準クロックより遅いことを示す)場合に、ソフトウェアベースビデオレンダリングプロセスは、動作734に進む。
動作732で、ソフトウェアベースビデオレンダリングプロセスは、普通の2VBIサイクルではなく4VBIサイクルの間、次のフレームを表示する。言い換えると、ソフトウェアベースビデオレンダリングプロセスは、第2VBIサイクルではなく第4VBIサイクルを次のレンダリングVBIサイクルとして指定することによって、次のビデオフレームの表示時間を2倍にする。また、ソフトウェアベースビデオレンダリングプロセスは、ビデオクロック時間から1ビデオフレーム時間の量を差し引く。ソフトウェアベースビデオレンダリングプロセスは、次に、動作708に戻って、レンダリングプロセスを繰り返す。
動作734で、ソフトウェアベースビデオレンダリングプロセスは、1フレームを捨て、1ビデオフレーム時間の量だけビデオクロック時間を増分するようにビデオデコーダに指示する。次のフレームが任意のディスプレイサイクルだけ後に受け取られたときに、非常に似た原理を適用することができる。次に、ソフトウェアベースビデオレンダリングプロセスは、動作708に戻って、レンダリングプロセスを繰り返す。
動作732および/または動作734で行われるビデオクロック調整の結果として、ビデオクロックドリフト時間が、1ビデオフレーム時間または基準クロックの33ms以内に戻され、ソフトウェアベースビデオレンダリングプロセスが、動作708に進むことができる。
上で説明したプロセスステップは、NTSC以外の標準規格に従うビデオに適用可能であり、かつ/またはこれに適合させることができる。たとえば、プログレッシブ標準規格に関して、ソフトウェアベースビデオレンダリングプロセスは、VBI極性がインターレース式コンテンツだけに関連するので、VBI極性を使用しない。
同様に、ソフトウェアベースビデオレンダリングプロセスは、他のサイクル持続時間を有する標準規格に適用可能である。そのような実装のいくつかで、ソフトウェアベースビデオレンダリングプロセスは、逆テレシネを行うことができる。これは、たとえば、このプロセスが、フレームレートが30フレーム毎秒(fps)であるかのようにビデオフレームをレンダリングすることによって、効果的に24fpsレートを達成できることを意味する。次に、ソフトウェアベースビデオレンダリングプロセスは、4つごとのフレームフリップ間隔に標準の2ではなく4をセットすることができ、これは、4つごとのフレームが、3つの先行するフレームの2倍の長さだけ表示されることを意味する。これらは、上で説明したソフトウェアベースビデオレンダリングプロセスの応用例の可能な例のうちの少数にすぎない。
例示的なオーディオおよびビデオのプレゼンテーション時刻スケジューリング
いくつかの実装で、ソフトウェアベースオーディオレンダリングプロセスおよびソフトウェアベースビデオレンダリングプロセスが、同期化プロセスで互いに通信して、再生時の待ち時間を減らすと同時に、捨てられる最初のフレームの発生を最小にすることができる。さらに、同期化プロセスは、ソフトウェアベースオーディオレンダリングプロセスおよびソフトウェアベースビデオレンダリングプロセスが出会うさまざまなオーディオフォーマットおよびビデオフォーマットならびに関連する圧縮技法および圧縮解除技法に動的に適応的とすることができる。そのようなオーディオビデオ同期化の例を、以下で、再生コマンド受取時のスタートアップおよび一時停止コマンドに応答する一時停止の文脈で説明する。
図8は、時間がこのページの上から下へ進行する、全般的に800として示された、そのようなオーディオビデオ同期化スタートアッププロセスの1つを表す。オーディオデコーダ802、オーディオレンダ804、ビデオレンダ806、およびビデオデコーダ808が、810で実行コマンドを受け取る。この実行コマンドが、ムービーを再生することであると仮定する。812で、このムービーからの第1オーディオサンプルが、オーディオデコーダ802からオーディオレンダ804に配信される。オーディオレンダは、このオーディオサンプルをレンダリングできる最も早い潜在的な時刻を判定する。814で、オーディオレンダ804が、オーディオサンプルの最も早い潜在的なオーディオレンダ時刻についてビデオレンダ806に通知する。いくつかの実装で、通信チャネルおよび/または関連する通信プロトコルを事前に確立して、待ち時間を減らしながらスタートアップを容易にすることができる。
816で、ビデオデコーダ808が、このムービーの第1ビデオフレームをビデオレンダ806に配信する。ビデオレンダは、第1ビデオフレームの最も早い潜在的なビデオレンダリング時刻を確かめる。818で、ビデオレンダ806が、そのフレームの最も早いビデオレンダ時刻についてオーディオレンダ804に通知する。オーディオレンダ804およびビデオレンダ806は、潜在的なオーディオレンダリング時刻および潜在的なビデオレンダリング時刻のうちの遅い方でレンダリングするように構成される。したがって、遅い方の潜在的なレンダ時刻に対応する時刻820に、オーディオレンダが、822でオーディオレンダを開始し、ビデオレンダが、824でビデオレンダを開始する。この特定の例では、オーディオレンダおよびビデオレンダが、最も早いレンダリング時刻に関する判定を行う。デコーダなどの他のコンポーネントを、その代わりにまたはそれに加えて、判断プロセスに用いることができる。
別の実施形態で、同期化プロセスを容易にするために、オーディオレンダ804がサンプルを受け取り、最も早い潜在的なレンダ時刻を判定したならば、オーディオレンダは、ビデオレンダが対応するビデオフレームを受け取ったかどうかを判定するためにビデオレンダ806に問い合わせることができる。肯定の場合に、オーディオレンダ804は、ビデオレンダの最も早い潜在的レンダ時刻に関してビデオレンダ806に問い合わせることができる。同様に、ビデオレンダがオーディオレンダに問い合わせることができる。
図9は、時間がこのページの上から下へ進行する、全般的に900として示された、もう1つのオーディオビデオ同期化プロセスを表す。この例では、同期化プロセスに、ユーザ一時停止コマンドが含まれる。オーディオデコーダ902、オーディオレンダ904、ビデオデコーダ906、およびビデオレンダ908が、910で一時停止コマンドを受け取る。一時停止コマンドが、ムービーの再生の過程中に受け取られ、オーディオレンダ904が、ビデオレンダ908より早く一時停止コマンドを受け取ると仮定する。オーディオデコーダ902およびビデオデコーダ906は、一時停止コマンドを受け取ったときに、メディアサンプルを配信するのに使用されるバッファを使い果たすまで、それぞれ、オーディオレンダおよびビデオレンダにデコードされたサンプルを配信することができる(動作912、914)。
動作922で、オーディオレンダが、オーディオハードウェアを一時停止し、その結果、オーディオハードウェアが、もはやオーディオサンプルを消費しなくなる。この時点で、オーディオレンダは、動作状態から一時停止状態への遷移を完了する。しかし、オーディオドライバにキューイングされたオーディオサンプルがある。DMAカーソル位置は、オーディオハードウェアが動作状態または再生状態に再開されたときにどのオーディオサンプルが消費されるかを示す。動作924で、ビデオレンダが、ビデオフレームのレンダリングを停止する。この時点で、ビデオレンダは、動作状態から一時停止状態への遷移を完了する。しかし、レンダリングを待っている、FIFOキュー内の少数のデコードされたビデオフレームがある。
オーディオレンダおよびビデオレンダは、一時停止状態ではもはやメディアサンプルを消費しないので、デコードされたサンプルを保持しているバッファは、解放されない。すぐに、デコーダがバッファを使い果たし、したがって、デコーダは、一時停止状態に入る(動作926および928)。動作930で、ユーザがメディアの再生を再開したときに、実行コマンドが、オーディオデコーダ902、オーディオレンダ904、ビデオデコーダ906、およびビデオレンダ908を含むすべてのモジュールに送られる。
動作930に応答して、オーディオレンダ904が、932で、ビデオレンダがフレームプレゼンテーションタイムスタンプ(PTS)に従ってビデオハードウェアのために次のビデオフレームを正確にいつ作ることができるかに関して問合せを始める。前に述べたように、ビデオレンダは、ビデオハードウェアのディスプレイサイクルによって生成されるVBI信号を記憶し、その結果、ビデオレンダは、基準クロックに関して、ビデオフレームが表示される正確な時刻を判定することができる。この時刻は、ミリ秒単位でt=t+n×33.34として表すことができ、ここで、tは、現在の基準クロック時刻tから次のVBIサイクル時間の終了時刻まで延び、nは、整数である(詳細については図6に関する議論を参照されたい)。
同様に、動作934で、オーディオレンダは、一時停止したオーディオサンプルPTSおよび動作932の第1ビデオフレームと同一のPTSを有するオーディオサンプルについて問い合わせることができる。オーディオハードウェアが一時停止した後のDMAカーソル位置を読み取ることによって、オーディオレンダは、オーディオハードウェアがレンダリングする次のサンプルのPTSを知ることができる。次のビデオフレームPTSと次のオーディオサンプルPTSの間の差(Δtとして示される)は、ビデオレンダが開始する前にオーディオレンダが開始すべきである時間である。
次のビデオフレームは、tでなければ開始できず、基準クロックに基づく現在時刻がtなので、したがって、nは、Δt/33.34に1を加えたものの整数部分であり、オーディオハードウェアは、t−Δtに再生を再開すべきである。言い換えると、オーディオハードウェアが再開する時刻が調整され、その結果、動作944で次のビデオフレームが表示されるときに、動作942で、Δt分のオーディオサンプルが、既に消費されている。したがって、オーディオハードウェアは、ビデオフレームPTSに非常に近いPTSを有するオーディオサンプルのレンダリングを開始する。このイベントの後に、オーディオレンダおよびビデオレンダは、メディアサンプルバッファの解放を開始する。これらのサンプルが消費されたならば、デコーダは、新しいメディアサンプルをレンダに配信することができる(動作952および954)。これは、オーディオレンダがビデオレンダより後に一時停止コマンドを受け取るΔt<0の場合にも適用され、これは、オーディオハードウェアが、ビデオレンダより|Δt|だけ後に再開することを意味する。
結論
さまざまな概念を、上でソフトウェアベースのオーディオレンダリングおよびビデオレンダリングに関して説明した。さまざまな実装で、これらの概念を複数のコンフィギュレーションで組み合わせることができる。たとえば、ビデオクロック従属化の概念を利用して、ビデオクロックをソースなどの外部クロックに同期化しながらリアルタイムビデオレンダリングをもたらすことができる。オーディオクロックを、挿入およびデシメーションの概念を利用してビデオクロックに同期化することができる。オーディオおよびビデオのスタートアップ同期化は、オーディオレンダリングプロセスとビデオレンダリングプロセスの間の通信を容易にして、捨てられる最初のフレームの発生を最小にしながら再生時の待ち時間を減らすことができる。
ソフトウェアベースオーディオレンダリングを実装できる例示的なシステムの表現を示す図である。 ソフトウェアベースオーディオレンダリングを実装できるオペレーティング環境の例示的なシステム、デバイス、およびコンポーネントを示す図である。 例示的なソフトウェアベースオーディオレンダリングプロセスを示す流れ図である。 例示的なソフトウェアベースオーディオレンダリング実装に関連するタイムラインおよびイベントの表現を示す図である。 例示的なソフトウェアベースビデオレンダリング実装に関連するタイムラインおよびイベントの表現を示す図である。 例示的なソフトウェアベースビデオレンダリング実装に関連するタイムラインおよびイベントの表現を示す図である。 例示的なソフトウェアベースビデオレンダリングプロセスを示す流れ図である。 例示的なソフトウェアベースビデオレンダリングプロセスを示す流れ図である。 ソフトウェアベースオーディオレンダリングとソフトウェアベースビデオレンダリングを同期化する例示的な実装に関連するタイムラインおよびイベントの表現を示す図である。 ソフトウェアベースオーディオレンダリングとソフトウェアベースビデオレンダリングを同期化する例示的な実装に関連するタイムラインおよびイベントの表現を示す図である。
符号の説明
102 コンピューティングデバイス
104 ディスプレイデバイス
110 ソース
112 パーサ
114 オーディオデコーダ
115A オーディオバッファ
115B オーディオバッファ
116 オーディオレンダリングエンジン
118 オーディオハードウェア
120 ビデオデコーダ
122A ビデオバッファ
122B ビデオバッファ
124 ビデオレンダリングエンジン
126 グラフィックスハードウェア
128 TVエンコーダ
244 処理ユニット
246 システムメモリ
248 バス
250 ROM
252 RAM
254 BIOS
266 SCSIインターフェース
268 シリアルポート
270 オペレーティングシステム
272 アプリケーションプログラム
274 他のモジュール
276 プログラムデータ
278 キーボード
282 キーボード/マウスインターフェース
286 ビデオハードウェア
290 ローカルエリアネットワーク
292 広域ネットワーク
294 ネットワークインターフェース
296 モデム
298 チューナコンポーネント

Claims (9)

  1. ソースから受け取ったオーディオサンプルを処理するためのオーディオハードウェアを含むコンピュータに、
    外部クロックオーディオクロックとの間の差であるドリフトが累積するレートである第1のドリフトレートを測定するステップであって、前記オーディオサンプルは前記ソースにより前記外部クロックにしたがって供給され、前記オーディオサンプルは前記オーディオハードウェアにより前記オーディオクロックにしたがって消費されるステップと、
    前記ドリフトが第1閾値に達したことに応答し第2ドリフトレートを達成するために、前記オーディオハードウェアにより消費されるオーディオサンプル数を調整するステップであって、前記第2ドリフトレートは、前記第1ドリフトレートより大きさが小さく、前記第1ドリフトレートと反対の極性を有するステップと
    を実行させることを特徴とするコンピュータプログラム。
  2. 前記調整するステップは、
    前記ドリフトが前記第2ドリフトレートで第2閾値に達するように、前記オーディオクロックをさらに操作するステップを含み、前記第2閾値は前記第1閾値より小さい大きさを有し、前記1の閾値反対の極性を有することを特徴とする請求項1に記載のコンピュータプログラム。
  3. 前記さらに操作するステップは、前記第2のドリフトレートより大きさが小さく、かつ所定の時間内に前記ドリフトを打ち消す第3ドリフトレートを判定するステップを含むことを特徴とする請求項に記載のコンピュータプログラム。
  4. 前記ドリフトが前記所定の時間内に前記第2閾値の対向する極性の間で振動する最小値が確立されるまで、徐々に小さくなるドリフトレートを計算するステップをさらに前記コンピュータに実行させることを特徴とする請求項に記載のコンピュータプログラム
  5. 前記第2閾値は、前記オーディオクロックに固有のジッタの大きさの少なくとも2倍であり、前記第2ドリフトレートで前記ドリフトが反対の極性の前記第2閾値に達することを特徴とする請求項に記載のコンピュータプログラム。
  6. 前記第2ドリフトレートで、前記ドリフトは負の極性の前記第2閾値から正の極性の前記第2閾値まで達するのに要する時間と同一の時間で正の極性の前記第2閾値から負の極性の前記第2閾値に達することを特徴とする請求項に記載のコンピュータプログラム。
  7. ソースから受け取ったオーディオサンプルを処理するためのオーディオハードウェアを含むコンピュータに、
    ーディオクロックレートを測定するステップであって、前記オーディオサンプルは前記ソースにより外部クロックにしたがって供給され、前記オーディオサンプルは前記オーディオハードウェアにより前記オーディオクロックにしたがって消費されるステップと、
    前記外部クロックレートと前記オーディオクロックレートとの差であるドリフトが振動するように、前記オーディオハードウェアにより消費される前記オーディオサンプル数を調整するステップと、
    をコンピュータに実行させ、前記操作するステップは、
    前記第1閾値を選択するステップと、
    前記ドリフトが前記第1閾値と等しいときに、前記ドリフトが累積するレートであるドリフトレートを低減するために前記オーディオクロックを調整するステップと
    前記ドリフトが前記第2閾値に達したときに、前記ドリフトを打ち消すように前記オーディオクロックをさらに操作するステップであって、前記第2閾値は前記第1閾値より小さい値を有し、前記第1閾値と反対の極性を有するステップ
    を含むことを特徴とするコンピュータプログラム。
  8. 前記オーディオクロックを調整するステップは、ソースからの少なくとも1つのオーディオフレームを2回レンダリングするステップを含むことを特徴とする請求項に記載のコンピュータプログラム。
  9. 前記さらに操作するステップは、少なくとも1つのオーディオサンプルを破棄することを含むことを特徴とする請求項に記載のコンピュータプログラム。
JP2006000680A 2005-01-05 2006-01-05 ソフトウェアベースオーディオレンダリング Active JP5147180B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/029,912 2005-01-05
US11/029,912 US7519845B2 (en) 2005-01-05 2005-01-05 Software-based audio rendering

Publications (2)

Publication Number Publication Date
JP2006215540A JP2006215540A (ja) 2006-08-17
JP5147180B2 true JP5147180B2 (ja) 2013-02-20

Family

ID=36575997

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006000680A Active JP5147180B2 (ja) 2005-01-05 2006-01-05 ソフトウェアベースオーディオレンダリング

Country Status (5)

Country Link
US (1) US7519845B2 (ja)
EP (1) EP1684516B1 (ja)
JP (1) JP5147180B2 (ja)
KR (1) KR101183337B1 (ja)
CN (1) CN1812589B (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8127242B1 (en) * 2010-08-12 2012-02-28 The United States Of America As Represented By The Secretary Of The Army Graphic user interface and software for processing large size signal data samples in a small buffer using automatically adjusted decimation ratio
US8488688B2 (en) 2004-10-29 2013-07-16 Sharp Kabushiki Kaisha Communication method and radio transmitter
US8150442B2 (en) 2005-01-18 2012-04-03 Sharp Kabushiki Kaisha Method and apparatus for controlling power of subcarriers in a wireless communication system
GB0508946D0 (en) * 2005-04-30 2005-06-08 Ibm Method and apparatus for streaming data
TWI321752B (en) * 2005-10-06 2010-03-11 Quanta Comp Inc Audio/video playing system
US9420332B2 (en) * 2006-07-06 2016-08-16 Qualcomm Incorporated Clock compensation techniques for audio decoding
US7765315B2 (en) * 2007-01-08 2010-07-27 Apple Inc. Time synchronization of multiple time-based data streams with independent clocks
GB2451828A (en) * 2007-08-13 2009-02-18 Snell & Wilcox Ltd Digital audio processing method for identifying periods in which samples may be deleted or repeated unobtrusively
US9571901B2 (en) * 2007-12-28 2017-02-14 Intel Corporation Synchronizing audio and video frames
US8655953B2 (en) 2008-07-18 2014-02-18 Porto Technology, Llc System and method for playback positioning of distributed media co-viewers
US8754904B2 (en) * 2011-04-03 2014-06-17 Lucidlogix Software Solutions, Ltd. Virtualization method of vertical-synchronization in graphics systems
US8909667B2 (en) 2011-11-01 2014-12-09 Lemi Technology, Llc Systems, methods, and computer readable media for generating recommendations in a media recommendation system
US8762815B2 (en) * 2012-04-30 2014-06-24 Lsi Corporation Systems and methods for data decoder state preservation during extended delay processing
JP2013243626A (ja) * 2012-05-23 2013-12-05 Sony Corp 信号処理装置、信号処理方法、およびプログラム
TWI557727B (zh) 2013-04-05 2016-11-11 杜比國際公司 音訊處理系統、多媒體處理系統、處理音訊位元流的方法以及電腦程式產品
KR20150045349A (ko) * 2013-10-18 2015-04-28 명지대학교 산학협력단 실감 효과 미디어 데이터 파일 구성 방법 및 장치, 실감 효과 미디어 데이터 파일 재생 방법 및 장치 및 실감 효과 미디어 데이터 파일 구조
EP2871848A1 (en) * 2013-11-12 2015-05-13 Koninklijke KPN N.V. Providing correction information for media synchronization
US9621948B2 (en) * 2015-01-29 2017-04-11 Universal Electronics Inc. System and method for prioritizing and filtering CEC commands
US10176644B2 (en) * 2015-06-07 2019-01-08 Apple Inc. Automatic rendering of 3D sound
US10229540B2 (en) * 2015-12-22 2019-03-12 Google Llc Adjusting video rendering rate of virtual reality content and processing of a stereoscopic image
US10510317B2 (en) 2016-06-03 2019-12-17 Apple Inc. Controlling display performance with target presentation times
US10726604B2 (en) * 2016-06-03 2020-07-28 Apple Inc. Controlling display performance using display statistics and feedback
US10353424B2 (en) 2016-07-01 2019-07-16 Imagination Technologies Limited Clock synchronisation
US10255033B2 (en) * 2016-12-13 2019-04-09 EVA Automation, Inc. Wireless coordination of audio playback
US11403106B2 (en) 2019-09-28 2022-08-02 Tencent America LLC Method and apparatus for stateless parallel processing of tasks and workflows
US20230073736A1 (en) * 2020-02-21 2023-03-09 Qualcomm Incorporated Reduced display processing unit transfer time to compensate for delayed graphics processing unit render time
US11336935B1 (en) * 2020-11-25 2022-05-17 Amazon Technologies, Inc. Detecting audio-video desyncrhonization
US11659217B1 (en) 2021-03-29 2023-05-23 Amazon Technologies, Inc. Event based audio-video sync detection
CN116543777A (zh) * 2022-01-26 2023-08-04 瑞昱半导体股份有限公司 动态调整音频时钟的音频处理设备及音频处理方法

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9405914D0 (en) * 1994-03-24 1994-05-11 Discovision Ass Video decompression
US4642794A (en) 1983-09-27 1987-02-10 Motorola Computer Systems, Inc. Video update FIFO buffer
JPH0697899A (ja) * 1992-09-16 1994-04-08 Hitachi Ltd 再生クロック周波数の調整方法
AU5992094A (en) * 1993-05-10 1994-12-12 Taligent, Inc. Multimedia synchronization system
FR2731864B1 (fr) 1995-03-14 1997-06-06 Sgs Thomson Microelectronics Decodeur mpeg a capacite memoire reduite
JPH09238362A (ja) * 1996-02-29 1997-09-09 Fujitsu Ltd テレビジョン表示機能をもつ情報処理装置
US5661665A (en) 1996-06-26 1997-08-26 Microsoft Corporation Multi-media synchronization
JP3472667B2 (ja) 1996-08-30 2003-12-02 株式会社日立製作所 ビデオデータ処理装置およびビデオデータ表示装置
US5764965A (en) * 1996-09-23 1998-06-09 Silicon Graphics, Inc. Synchronization infrastructure for use in a computer system
US6262776B1 (en) 1996-12-13 2001-07-17 Microsoft Corporation System and method for maintaining synchronization between audio and video
US6606410B2 (en) * 1997-01-17 2003-08-12 Samsung Electronics Co., Ltd. Method and apparatus for detecting a synchronous signal
US5761434A (en) * 1997-03-06 1998-06-02 Advanced Micro Devices, Inc. Digital audio system including a software controlled phase lock loop for synchronizing audio sources to a common clock source
US6100906A (en) * 1998-04-22 2000-08-08 Ati Technologies, Inc. Method and apparatus for improved double buffering
US6279058B1 (en) * 1998-07-02 2001-08-21 Advanced Micro Devices, Inc. Master isochronous clock structure having a clock controller coupling to a CPU and two data buses
US6304297B1 (en) 1998-07-21 2001-10-16 Ati Technologies, Inc. Method and apparatus for manipulating display of update rate
US6661846B1 (en) * 1998-10-14 2003-12-09 Sony Corporation Adaptive clocking mechanism for digital video decoder
JP2000122681A (ja) 1998-10-20 2000-04-28 Victor Co Of Japan Ltd 音声データ同期再生装置
US6144323A (en) 1998-12-09 2000-11-07 Lsi Logic Corporation Method and apparatus for decoding video data
US6762761B2 (en) 1999-03-31 2004-07-13 International Business Machines Corporation Method and system for graphics rendering using hardware-event-triggered execution of captured graphics hardware instructions
US6598172B1 (en) * 1999-10-29 2003-07-22 Intel Corporation System and method for clock skew compensation between encoder and decoder clocks by calculating drift metric, and using it to modify time-stamps of data packets
US6594773B1 (en) 1999-11-12 2003-07-15 Microsoft Corporation Adaptive control of streaming data in a graph
US6429902B1 (en) 1999-12-07 2002-08-06 Lsi Logic Corporation Method and apparatus for audio and video end-to-end synchronization
JP4612171B2 (ja) * 2000-10-27 2011-01-12 株式会社東芝 動画像復号再生モジュールと再生時刻管理プログラムとマルチメディア情報受信装置
GB2373121A (en) 2001-03-10 2002-09-11 Sharp Kk Frame rate controller
US6943844B2 (en) * 2001-06-13 2005-09-13 Intel Corporation Adjusting pixel clock
US6880098B1 (en) * 2001-09-07 2005-04-12 Sprint Communications Company L.P. Timing recovery in a packet network using a buffer
AU2002361767A1 (en) 2001-12-17 2003-07-09 Becomm Corporation Method and system for synchronization of content rendering
US9948977B2 (en) * 2003-01-09 2018-04-17 Avago Technologies General Ip (Singapore) Pte. Ltd. System, method, and apparatus for determining presentation time for picture without presentation time stamp
US20060007356A1 (en) 2002-10-24 2006-01-12 Thomson Licensing S.A. Method and system for maintaining lip synchronization
KR100981693B1 (ko) 2002-12-16 2010-09-13 코닌클리케 필립스 일렉트로닉스 엔.브이. 비디오 신호의 타임-베이스를 변경하는 시스템
US20060104367A1 (en) 2003-01-06 2006-05-18 Koninklijke Philips Electronics N.V. Method and apparatus for improving audio-video signal sync stability in digital recording devices
FI114882B (fi) 2003-04-30 2005-01-14 Nokia Corp Kuvakehysten päivityksen synkronointi
US8995536B2 (en) 2003-07-23 2015-03-31 Broadcom Corporation System and method for audio/video synchronization
US6768433B1 (en) * 2003-09-25 2004-07-27 Lsi Logic Corporation Method and system for decoding biphase-mark encoded data
US7574274B2 (en) * 2004-04-14 2009-08-11 Nvidia Corporation Method and system for synchronizing audio processing modules
US20060007200A1 (en) 2004-07-08 2006-01-12 David Young Method and system for displaying a sequence of image frames
US7786998B2 (en) 2004-11-12 2010-08-31 Ati Technologies Ulc Methods and apparatus for controlling video playback
US8692838B2 (en) 2004-11-24 2014-04-08 Qualcomm Incorporated Methods and systems for updating a buffer

Also Published As

Publication number Publication date
JP2006215540A (ja) 2006-08-17
US7519845B2 (en) 2009-04-14
CN1812589A (zh) 2006-08-02
CN1812589B (zh) 2011-02-23
KR20060080550A (ko) 2006-07-10
EP1684516A3 (en) 2007-02-28
EP1684516A2 (en) 2006-07-26
EP1684516B1 (en) 2018-05-16
US20060146185A1 (en) 2006-07-06
KR101183337B1 (ko) 2012-09-14

Similar Documents

Publication Publication Date Title
JP5147180B2 (ja) ソフトウェアベースオーディオレンダリング
US9489980B2 (en) Video/audio synchronization apparatus and video/audio synchronization method
US8526501B2 (en) Decoder and decoding method based on video and audio time information
JPH10507597A (ja) マルチメディア・システムのためのプログラマブルなオーディオ−ビデオ同期方法および装置
US8582033B2 (en) Movie reproduction system and movie reproduction method for reducing delay time of reproduced movie
CN101119461B (zh) 保持视频帧及音频帧同步播放的系统及方法
JP6486628B2 (ja) メディア・ストリームの同期再生を行う相互接続マルチメディア・システム
US7158187B2 (en) Audio video reproduction apparatus, audio video reproduction method, program, and medium
US20060150071A1 (en) Software-based video rendering
CN110519627A (zh) 一种音频数据的同步方法和装置
JP4933145B2 (ja) ネットワーク受信機
JP2009200938A (ja) バッファ制御装置及び受信装置
US20020023120A1 (en) Method of playing multimedia data
JP5093233B2 (ja) 信号出力装置、情報機器、信号出力方法および信号出力プログラム
US6697121B2 (en) Synchronous decoding method for AV packets
US7254310B2 (en) Clock-slaving in a programmable video recorder
US20100329632A1 (en) Video processing apparatus and video processing method
JP5101668B2 (ja) デジタルビデオ収録再生装置
US20070248170A1 (en) Transmitting Apparatus, Receiving Apparatus, and Reproducing Apparatus
CN110856028B (zh) 一种媒体数据的播放方法、设备及存储介质
JP3764878B2 (ja) 映像音声再生装置,映像音声再生方法,プログラム,および媒体
JP2010220156A (ja) 映像再生装置および方法並びにプログラム
JP2007201797A (ja) 伝送システム及び映像出力方法
JP2005229168A (ja) メディア出力システムとその同期誤差制御方法およびプログラム
JP5092028B2 (ja) 映像処理装置及び映像処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081225

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110715

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110726

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111025

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120410

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120710

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121109

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121127

R150 Certificate of patent or registration of utility model

Ref document number: 5147180

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151207

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250