專利名稱:基于軟件的音頻呈現(xiàn)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及媒體呈現(xiàn),尤其涉及基于軟件的音頻呈現(xiàn)。
背景技術(shù):
存在收聽和/或觀看媒體內(nèi)容的大量消費(fèi)者需求。這樣的媒體內(nèi)容很容易從大量來源獲得。消費(fèi)者在它們觀看和/或收聽這樣的媒體時(shí)希望有質(zhì)量的體驗(yàn)。此外,消費(fèi)者看重能執(zhí)行多種功能并且還能提供有質(zhì)量的用戶體驗(yàn)的單個(gè)多功能消費(fèi)者設(shè)備。
個(gè)人計(jì)算機(jī)(PC)提供一種多功能平臺(tái)來觀看和/或收聽媒體。PC獲得媒體,將它適當(dāng)?shù)仄饰銎饰龀梢纛l數(shù)據(jù)和視頻數(shù)據(jù)。PC隨后解碼該媒體,并且諸如通過顯示設(shè)備和/或揚(yáng)聲器呈現(xiàn)數(shù)據(jù)以向用戶演示。PC單獨(dú)或結(jié)合硬件組件使用基于軟件的組件來解碼和呈現(xiàn)媒體。PC平臺(tái)的基于軟件的配置是多功能的,因?yàn)樗蛇m用于播放各種媒體格式。此外,隨著新格式的開發(fā),PC可被更新以處理新格式。這樣的更新經(jīng)常可以自動(dòng)地完成,很少需要或不需要用戶費(fèi)神。諸如基于硬件的平臺(tái)等其它平臺(tái)的多功能性稍弱,因?yàn)樗鼈兪窃谥圃鞎r(shí)“配置”的,并且沒有或只有有限的這些能力。
PC的這種多功能性已經(jīng)讓大部分消費(fèi)者接受。然而,為了利用它的多功能性,PC平臺(tái)已經(jīng)將優(yōu)先級(jí)給予了各種設(shè)計(jì)參數(shù)而不是其它方面。例如,在從直播來源獲得音頻樣本的情況下,在現(xiàn)有PC平臺(tái)上的音頻呈現(xiàn)可能沒有使音頻硬件呈現(xiàn)速率與音頻樣本捕捉速率協(xié)調(diào)的能力。然而,如果未經(jīng)檢查的話,在兩分鐘之間的任何差異隨著延長(zhǎng)的播放時(shí)間的過去會(huì)變得顯著。
例如,在從諸如陸地、電纜或衛(wèi)星無線電或TV廣播系統(tǒng)等直播來源捕捉音頻樣本的情況下,源時(shí)鐘與音頻呈現(xiàn)硬件時(shí)鐘之間的漂移最后可能變得如此之大,以致于某些音頻樣本必須被丟棄或者必須在直播音頻流中插入靜音。這樣一種場(chǎng)景可以產(chǎn)生不太令人愉快的用戶體驗(yàn)。此外,在PC平臺(tái)上,其中音頻呈現(xiàn)組件基于它自己的時(shí)鐘來呈現(xiàn),該時(shí)鐘常常與媒體源或視頻呈現(xiàn)組件不同步,會(huì)發(fā)生一種情況,其中音頻演示與相應(yīng)的視頻演示的不同步到觀看者很容易注意到它的程度。這樣的情況通過諸如播放電影等長(zhǎng)時(shí)間的播放,或在長(zhǎng)時(shí)間觀看單個(gè)TV頻道時(shí)會(huì)加劇。
隨著技術(shù)的進(jìn)步,消費(fèi)者希望由當(dāng)前PC的基于軟件的平臺(tái)結(jié)合提高的圖像和/或聲音質(zhì)量提供的靈活性,來填充不斷擴(kuò)大的消費(fèi)者設(shè)備和場(chǎng)景的領(lǐng)域。
發(fā)明內(nèi)容
描述了基于軟件的音頻呈現(xiàn)。一個(gè)特定的實(shí)現(xiàn)包括計(jì)算機(jī)可讀介質(zhì),它被配置成測(cè)量外部時(shí)鐘與音頻時(shí)鐘之間的第一漂移速率,直到該漂移達(dá)到一個(gè)閾值。響應(yīng)于漂移達(dá)到該閾值并且基于第一漂移速率,該實(shí)現(xiàn)操縱音頻時(shí)鐘,使它達(dá)到具有較小值以及與第一漂移速率相反的極性的第二漂移速率。
另一個(gè)實(shí)現(xiàn)確定第一音頻樣本的可能音頻呈現(xiàn)時(shí)間。該實(shí)現(xiàn)查明第一視頻幀的可能視頻呈現(xiàn)時(shí)間。該實(shí)現(xiàn)在可能音頻呈現(xiàn)時(shí)間與可能視頻呈現(xiàn)時(shí)間中的較后者呈現(xiàn)第一音頻樣本和第一視頻幀。
圖1示出了其中可實(shí)現(xiàn)基于軟件的音頻呈現(xiàn)的示例性系統(tǒng)的表示。
圖2示出其中可實(shí)現(xiàn)基于軟件的音頻呈現(xiàn)的操作環(huán)境中的示例性系統(tǒng)、設(shè)備和組件。
圖3包括示出一個(gè)示例性基于軟件的音頻呈現(xiàn)過程的流程圖。
圖4示出與示例性基于軟件的音頻呈現(xiàn)實(shí)現(xiàn)相關(guān)聯(lián)的時(shí)間線和事件的表示。
圖5-6示出與示例性基于軟件的視頻呈現(xiàn)實(shí)現(xiàn)相關(guān)聯(lián)的時(shí)間線和事件的表示。
圖7A-7B包括示出一個(gè)示例性基于軟件的視頻呈現(xiàn)過程的流程圖。
圖8-9示出與用于同步基于軟件的音頻呈現(xiàn)與基于軟件的視頻呈現(xiàn)的示例性實(shí)現(xiàn)相關(guān)聯(lián)的時(shí)間線和事件的表示。
具體實(shí)施例方式
綜述下面的描述涉及用于基于軟件的音頻呈現(xiàn)和/或使音頻呈現(xiàn)過程與外部時(shí)鐘和/或視頻呈現(xiàn)過程同步的方法與系統(tǒng)。
可將數(shù)字音頻內(nèi)容視為被配置成以給定的源速率處理來為用戶產(chǎn)生聲音的多個(gè)樣本。源按照源時(shí)鐘以給定的音頻采樣速率提供音頻樣本。音頻解碼器對(duì)音頻樣本進(jìn)行解碼,并且使經(jīng)解碼內(nèi)容的各個(gè)樣本可用于呈現(xiàn)。音頻樣本可以向音頻硬件呈現(xiàn)。音頻硬件具有按照給定的源速率設(shè)置的處理周期。音頻硬件按照音頻硬件的時(shí)鐘以源采樣速率處理或消耗樣本,該時(shí)鐘可略微不同于源硬件的時(shí)鐘。
基于軟件的音頻呈現(xiàn)過程可以協(xié)調(diào)來自源的音頻內(nèi)容的產(chǎn)生與在音頻硬件處內(nèi)容的消耗或處理?;谲浖囊纛l呈現(xiàn)過程使用音頻時(shí)鐘時(shí)間來協(xié)調(diào)呈現(xiàn)過程。音頻時(shí)鐘是從在單位時(shí)間內(nèi)由音頻硬件消耗的多個(gè)音頻樣本中導(dǎo)出的,該單位時(shí)間反映音頻硬件的時(shí)鐘。
在一個(gè)實(shí)現(xiàn)中,基于軟件的音頻呈現(xiàn)過程通過測(cè)量音頻時(shí)鐘相對(duì)于外部時(shí)鐘的速率來使它的音頻時(shí)鐘與外部時(shí)鐘同步。例如,音頻呈現(xiàn)過程可測(cè)量在第一條件(其中漂移正在接近閾值)期間的速率。該閾值可以從一個(gè)值范圍內(nèi)選擇,該范圍內(nèi)的值比任何系統(tǒng)抖動(dòng)都大,但比將產(chǎn)生值得注意的口型同步不一致的值要小。該音頻呈現(xiàn)過程隨后可基于測(cè)量到的速率,過度補(bǔ)償至第二條件,使得時(shí)鐘漂移消除。某些實(shí)現(xiàn)采用更多的步驟來精細(xì)調(diào)整測(cè)量到的速率與音頻速率之間漂移的速率,使得音頻時(shí)鐘速率圍繞測(cè)量到的速率振蕩。這些實(shí)現(xiàn)可預(yù)期在選擇音頻速率如何圍繞測(cè)量到的速率振蕩時(shí)諸如系統(tǒng)抖動(dòng)和口型同步不一致之類的問題。由于音頻時(shí)鐘圍繞測(cè)量到的速率振蕩,累積漂移消除以提供非常令人愉快的用戶體驗(yàn)。
某些實(shí)現(xiàn)使用速率重采樣操縱音頻時(shí)鐘,這涉及根據(jù)環(huán)境丟棄或抽取單獨(dú)的幀或者呈現(xiàn)單獨(dú)的幀多次。下面將更詳細(xì)地描述作為操縱音頻時(shí)鐘速率的方法的速率重采樣。
為給用戶創(chuàng)建視頻圖象,顯示設(shè)備和相關(guān)聯(lián)的圖形硬件被配置成產(chǎn)生一系列用戶感知為“運(yùn)動(dòng)視頻”的順序圖象。顯示設(shè)備按照一組標(biāo)準(zhǔn)來配置,以符合非常精確的顯示或操作周期。對(duì)于每個(gè)顯示周期的一致周期,顯示設(shè)備從可用的視頻幀生成圖象?;谲浖囊曨l呈現(xiàn)過程被配置成跟蹤這個(gè)顯示周期?;谲浖囊曨l呈現(xiàn)引擎可以基于該跟蹤在顯示周期中的適當(dāng)點(diǎn)處呈現(xiàn)顯示設(shè)備的單獨(dú)視頻幀。用戶對(duì)運(yùn)動(dòng)視頻的感知或觀看體驗(yàn)在按照顯示設(shè)備的顯示周期呈現(xiàn)一系列單獨(dú)的幀時(shí)得到增強(qiáng)。
此外,用戶的觀看體驗(yàn)在相應(yīng)的音頻和視頻數(shù)據(jù)以經(jīng)同步的方式演示給用戶時(shí)得到增強(qiáng)。描述了用于同步音頻和視頻演示的實(shí)現(xiàn)。例如,當(dāng)用戶發(fā)出諸如播放電影等播放命令時(shí),同步過程可以確定電影的第一音頻樣本的可能音頻呈現(xiàn)時(shí)間,并且可以查明電影的第一視頻幀的可能視頻呈現(xiàn)時(shí)間。該同步過程隨后可以在可能音頻呈現(xiàn)時(shí)間與可能視頻呈現(xiàn)時(shí)間中的較后者呈現(xiàn)第一音頻樣本,使得音頻與視頻演示同時(shí)開始。
下面描述的實(shí)現(xiàn)在計(jì)算環(huán)境的上下文中描述。各種配置可以由諸如程序模塊等由如個(gè)人計(jì)算機(jī)或PC等計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令或代碼裝置來實(shí)現(xiàn),。通常,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或者實(shí)現(xiàn)特定的抽象數(shù)據(jù)類型。
可在除PC以外的計(jì)算機(jī)系統(tǒng)配置中實(shí)現(xiàn)各種實(shí)施例。例如,各種實(shí)施例可在手持式設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型機(jī)等中實(shí)現(xiàn)。而且,隨著技術(shù)繼續(xù)發(fā)展,各種實(shí)施例可在尚待識(shí)別的設(shè)備類上實(shí)現(xiàn)。例如,本實(shí)現(xiàn)的多功能性結(jié)合日益增長(zhǎng)的處理能力可產(chǎn)生在一般的物理外觀上類似當(dāng)今蜂窩電話的設(shè)備,但可以通過設(shè)備的處理能力、數(shù)據(jù)傳輸能力和/或顯示能力來執(zhí)行各種組合功能。這只是用于所描述的實(shí)現(xiàn)的現(xiàn)有與正在開發(fā)的多種配置之一。
可替換地或者除此之外,各種實(shí)施例也可在分布式計(jì)算環(huán)境中實(shí)踐,其中任務(wù)由通過通信網(wǎng)絡(luò)連接的遠(yuǎn)程處理設(shè)備來執(zhí)行。在分布式計(jì)算環(huán)境中,程序模塊可位于本地與遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。
盡管如上所述的各種實(shí)現(xiàn)可結(jié)合到上述各種類型的操作環(huán)境中,但在圖2的以常規(guī)計(jì)算設(shè)備形式的示例性通用計(jì)算設(shè)備的上下文中只出現(xiàn)一個(gè)示例性環(huán)境的描述,該常規(guī)計(jì)算設(shè)備在本文檔末尾的“示例性操作環(huán)境”標(biāo)題下更詳細(xì)地描述。
示例性實(shí)現(xiàn)圖1示出用于執(zhí)行基于軟件的音頻呈現(xiàn)和/或基于軟件的視頻呈現(xiàn)的示例性系統(tǒng)100。系統(tǒng)100包括耦合到顯示設(shè)備104的計(jì)算設(shè)備102,諸如PC。計(jì)算設(shè)備102也可以耦合到如一般在106處指示的網(wǎng)絡(luò),諸如因特網(wǎng)。
計(jì)算設(shè)備102可以包括源110、剖析器112、音頻解碼器114、兩個(gè)音頻緩沖器115A、115B、基于軟件的音頻呈現(xiàn)引擎116和音頻硬件118。該計(jì)算設(shè)備還包括基于軟件的視頻解碼器120、兩個(gè)視頻緩沖器122A、122B、基于軟件的視頻呈現(xiàn)引擎124、圖形硬件126和電視編碼器128。在這個(gè)特定的系統(tǒng)配置中,剖析器112、音頻解碼器114、音頻緩沖器115A、115B、音頻呈現(xiàn)引擎116、視頻解碼器120、緩沖器122A、122B和視頻呈現(xiàn)引擎124被實(shí)現(xiàn)為軟件模塊。這些模塊存儲(chǔ)在存儲(chǔ)器中并由一個(gè)或多個(gè)處理器執(zhí)行。存儲(chǔ)和處理器沒有在圖1中明確示出,但圖5示出了這樣一個(gè)計(jì)算系統(tǒng)的一個(gè)示例性配置。
源110表示視頻和/或音頻內(nèi)容的本地存儲(chǔ),其中內(nèi)容以各種格式存儲(chǔ)。源110可被實(shí)現(xiàn)為數(shù)據(jù)存儲(chǔ)或存儲(chǔ)器設(shè)備??晒┨鎿Q地或除源110之外,計(jì)算設(shè)備102也可通過網(wǎng)絡(luò)106訪問外部源。剖析器112被配置成識(shí)別從源110或者通過網(wǎng)絡(luò)106接收到的音頻和/或視頻的各種數(shù)據(jù)格式。剖析器112將音頻數(shù)據(jù)分發(fā)給基于軟件的音頻解碼器114,并將視頻數(shù)據(jù)分發(fā)給基于軟件的視頻解碼器120。
音頻可以將數(shù)字音頻內(nèi)容視為被配置成以給定的源速率處理來累積地為用戶產(chǎn)生聲音的多個(gè)樣本。諸如源110等源按照源或外部時(shí)鐘(未明確指定)以給定的源速率提供音頻樣本。例如,如果給定的源速率是每秒1,000個(gè)樣本或1,000赫茲(Hz),則源按照源時(shí)鐘以1,000Hz的速率產(chǎn)生樣本。源速率一般運(yùn)行在20,000到50,000赫茲范圍內(nèi),盡管其它源速率適用于下述技術(shù)。用這樣一個(gè)每秒較高的樣本數(shù),人們一般不能察覺到單獨(dú)的樣本。該事實(shí)可以有利地用于音頻時(shí)鐘同步,如從下文中將清楚的。
音頻解碼器114對(duì)由源產(chǎn)生的音頻樣本進(jìn)行解碼,并且通過音頻緩沖器115A使單獨(dú)的經(jīng)解碼的樣本對(duì)音頻呈現(xiàn)引擎116可用。可以將音頻樣本呈現(xiàn)到音頻硬件118。音頻硬件具有按照給定源速率設(shè)置的處理周期。例如,當(dāng)源速率是每秒1,000個(gè)樣本時(shí),則設(shè)置音頻硬件的處理周期,使得每秒消耗1,000個(gè)音頻樣本。音頻硬件可能沒有每秒可讀時(shí)鐘時(shí)間,但硬件的處理速率可以被確定為在外部時(shí)鐘上每單位時(shí)間消耗的樣本,或者被確定為在源處產(chǎn)生的樣本與由音頻硬件消耗的樣本之比。
基于軟件的音頻呈現(xiàn)引擎116使用音頻時(shí)鐘來給音頻呈現(xiàn)過程提供時(shí)間。音頻時(shí)鐘速率是從每單位時(shí)間音頻硬件消耗的樣本數(shù)中導(dǎo)出的?;谲浖囊纛l呈現(xiàn)引擎116被配置成跟蹤或測(cè)量相對(duì)于外部時(shí)鐘的音頻時(shí)鐘?;谲浖囊纛l呈現(xiàn)引擎還可以采取一個(gè)動(dòng)作來減少音頻時(shí)鐘與外部時(shí)鐘之間累積的漂移。因此,例如,假定源演示時(shí)間是一個(gè)小時(shí)?;谲浖囊纛l呈現(xiàn)過程可以采取一個(gè)動(dòng)作來減少在一個(gè)小時(shí)的播放期間音頻時(shí)鐘與外部時(shí)鐘之間的累積漂移,即使兩個(gè)時(shí)鐘可以精確地或者可以不精確地在一個(gè)小時(shí)持續(xù)時(shí)間內(nèi)的特定瞬時(shí)時(shí)間點(diǎn)同步。此外,如將在下面描述的,并非試圖精確地使音頻時(shí)鐘與測(cè)量到的速率匹配,而是音頻呈現(xiàn)引擎可以操縱音頻時(shí)鐘,使得音頻時(shí)鐘速率圍繞測(cè)量到的速率振蕩以有效地消除任何累積漂移。
基于軟件的音頻呈現(xiàn)引擎可以實(shí)現(xiàn)來減少音頻時(shí)鐘與外部時(shí)鐘之間的累積漂移的過程的更詳細(xì)示例在下面參考圖3-4描述。
視頻基于軟件的視頻解碼器120從剖析器112接收視頻內(nèi)容并且對(duì)視頻內(nèi)容的各個(gè)幀進(jìn)行解碼?;谲浖囊曨l解碼器120在緩沖器122A中緩沖經(jīng)解碼的幀?;谲浖囊曨l呈現(xiàn)引擎124訪問緩沖器122A并且呈現(xiàn)由視頻解碼器120放在緩沖器122A中的經(jīng)解碼的幀。一旦呈現(xiàn)一個(gè)幀,基于軟件的視頻呈現(xiàn)引擎就輸出所呈現(xiàn)的幀至圖形硬件126。所呈現(xiàn)的幀也被存儲(chǔ)在緩沖器122B中,其中視頻解碼器120可以用它來解碼下游的幀。在這個(gè)特定的系統(tǒng)配置中,使用兩個(gè)緩沖器。然而,在其它系統(tǒng)配置中,可使用兩個(gè)以上緩沖器。而且,這個(gè)特定的系統(tǒng)配置使用兩個(gè)FIFO(先進(jìn)先出)緩沖器。
緩沖器122A、122B允許基于軟件的視頻呈現(xiàn)引擎124獨(dú)立地并且與基于軟件的視頻解碼器120異步地操作。視頻解碼器120可以用一種速率來處理和排隊(duì)視頻幀,同時(shí)視頻呈現(xiàn)引擎124以不同的速率提取和處理這些幀。這允許視頻解碼器120用比視頻幀顯示速率快的速率來解碼視頻幀。因此,例如,如果顯示速率是每秒30幀(fps),則解碼器可在一段時(shí)間內(nèi)解碼40fps。通過允許解碼器累積緩沖幀,該實(shí)現(xiàn)可以在基于軟件的視頻解碼器不能得到足夠的CPU周期來及時(shí)地解碼視頻幀(由于具有較高優(yōu)先級(jí)活動(dòng)的其它軟件模塊的突然猛增)的情況下令人滿意地執(zhí)行。額外緩沖的幀可以通過允許基于軟件的視頻解碼器120提前解碼再多幾個(gè)視頻幀以補(bǔ)償這種情況來減少這種情況的發(fā)生。
基于軟件的視頻呈現(xiàn)引擎124呈現(xiàn)單獨(dú)的視頻幀至圖形硬件126。圖形硬件提供被呈現(xiàn)的幀至電視編碼器128。電視編碼器掃描視頻幀并且以顯示設(shè)備104用于生成圖象的形式來提供數(shù)據(jù)。連續(xù)的圖象系列創(chuàng)建用戶能感知的運(yùn)動(dòng)視頻。
兼容于NTSC標(biāo)準(zhǔn),顯示設(shè)備104和電視編碼器128按照定義的顯示周期在兩個(gè)掃描或VBI周期中顯示每個(gè)幀。在顯示周期內(nèi),第一掃描周期涉及偶半幀,而第二掃描周期涉及奇半幀。每個(gè)掃描周期持續(xù)由標(biāo)準(zhǔn)指定的持續(xù)時(shí)間。在第一掃描周期中,從幀的偶半幀創(chuàng)建圖象,并在第二掃描周期中,從與偶半幀隔行交織的奇半幀創(chuàng)建圖象。在偶半幀中,電視編碼器128掃描幀的偶數(shù)行,并在奇半幀中,電視編碼器128掃描幀的奇數(shù)行。
對(duì)于每個(gè)半幀,電視編碼器128掃描在屏幕左上角開始的行,并且水平地依次地每隔一行進(jìn)行掃描,直到它到達(dá)屏幕的右下角。在到達(dá)右下角時(shí),當(dāng)電視編碼器128從顯示屏的右下角返回到左上角時(shí),經(jīng)歷非掃描的垂直消隱期(VBI)事件。每個(gè)半幀顯示一個(gè)掃描或VBI周期,其中VBI周期被定義為從一個(gè)VBI事件到下一個(gè)VBI事件的跨度。按照NTSC標(biāo)準(zhǔn),每個(gè)VBI周期持續(xù)16.67毫秒(ms)。由于每個(gè)幀顯示兩個(gè)VBI周期,所以幀的顯示周期是33.34ms。
為用戶同步音頻與視頻輸出基于軟件的音頻呈現(xiàn)引擎114和基于軟件的視頻呈現(xiàn)引擎124允許系統(tǒng)100為用戶同步相應(yīng)的音頻與視頻。例如,基于軟件的視頻呈現(xiàn)引擎可以確定單獨(dú)視頻幀進(jìn)入顯示周期的實(shí)際時(shí)間,在此時(shí)掃描它以在顯示設(shè)備上顯示?;谲浖囊曨l呈現(xiàn)引擎可以將該時(shí)間傳送給基于軟件的音頻呈現(xiàn)引擎,后者隨后可以在適當(dāng)?shù)臅r(shí)間呈現(xiàn)相應(yīng)的音頻樣本,使得聲音產(chǎn)生對(duì)應(yīng)于可視圖象。這樣的過程在下面至少參考圖8-9來描述。
示例性操作環(huán)境圖2示出可以用于實(shí)現(xiàn)上述基于軟件的視頻呈現(xiàn)過程的示例性計(jì)算設(shè)備。計(jì)算設(shè)備242包括一個(gè)或多個(gè)處理器或處理單元244、系統(tǒng)存儲(chǔ)器246和總線246,總線246將包括系統(tǒng)存儲(chǔ)器246在內(nèi)的各種系統(tǒng)組件耦合到處理器244??梢栽谝粋€(gè)或多個(gè)處理器上使用多線程技術(shù),以允許多任務(wù)的并行處理。
總線248表示任意若干類型的總線結(jié)構(gòu)的一個(gè)或多個(gè),包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線、加速圖形端口和使用各種各樣總線體系結(jié)構(gòu)的任一種的處理器或局部總線。系統(tǒng)存儲(chǔ)器246包括只讀存儲(chǔ)器(ROM)250和隨機(jī)存取存儲(chǔ)器(RAM)252。基本輸入/輸出系統(tǒng)(BIOS)254包含諸如在啟動(dòng)時(shí)幫助在計(jì)算設(shè)備242內(nèi)的元件之間傳送信息的基本例程,存儲(chǔ)在ROM 250中。
計(jì)算設(shè)備242還可以包括讀寫硬盤(未示出)的硬盤驅(qū)動(dòng)器256,讀寫可移動(dòng)磁盤260的磁盤驅(qū)動(dòng)器258,以及讀寫可移動(dòng)光盤264,諸如CD ROM或其它光學(xué)介質(zhì)的光盤驅(qū)動(dòng)器262。硬盤驅(qū)動(dòng)器256、磁盤驅(qū)動(dòng)器258和光盤驅(qū)動(dòng)器262通過SCSI接口266或一些其它合適的接口連接到總線248。驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)242提供計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的非易失性存儲(chǔ)。盡管在此描述的示例性環(huán)境使用硬盤、可移動(dòng)磁盤260和可移動(dòng)光盤264,但本領(lǐng)域的技術(shù)人員應(yīng)該意識(shí)到,在示例性操作環(huán)境中,也可以使用能存儲(chǔ)由計(jì)算機(jī)訪問的數(shù)據(jù)的其它類型的計(jì)算機(jī)可讀介質(zhì),諸如磁帶盒、閃存卡、數(shù)字視頻盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)等等。
多個(gè)程序模塊可存儲(chǔ)在硬盤256、磁盤260、光盤264、ROM 250或RAM 252上,包括操作系統(tǒng)270、一個(gè)或多個(gè)應(yīng)用程序272(諸如用戶代理或?yàn)g覽器)、其它程序模塊274和程序數(shù)據(jù)276。用戶可通過輸入設(shè)備,諸如鍵盤278和定點(diǎn)設(shè)備280將命令和信息輸入到計(jì)算機(jī)242中。其它輸入設(shè)備(未示出)可包括話筒、操縱桿、游戲墊、衛(wèi)星天線、掃描儀等等。這些和其它輸入設(shè)備通過耦合到總線248的接口282連接到處理單元244。監(jiān)示器284或其它類型的顯示設(shè)備也通過接口,諸如視頻硬件286連接到總線248。除了監(jiān)示器外,個(gè)人計(jì)算機(jī)一般包括其它外圍輸出設(shè)備(未示出),諸如揚(yáng)聲器和打印機(jī)。
計(jì)算機(jī)242通常使用至一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)288的邏輯連接在網(wǎng)絡(luò)化環(huán)境中運(yùn)行。遠(yuǎn)程計(jì)算機(jī)288可以是另一個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它常見的網(wǎng)絡(luò)節(jié)點(diǎn),并且一般包括上面相對(duì)于計(jì)算機(jī)242所描述的許多或全部元素。圖4所示的邏輯連接包括局域網(wǎng)(LAN)290和廣域網(wǎng)(WAN)292。這樣的網(wǎng)絡(luò)環(huán)境在辦公室、企業(yè)級(jí)計(jì)算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)部互聯(lián)網(wǎng)和因特網(wǎng)中是很常見的。
當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)242通過網(wǎng)絡(luò)接口或適配器294連接到局域網(wǎng)。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)242一般包括調(diào)制解調(diào)器296或用于通過廣域網(wǎng)292,諸如因特網(wǎng)建立通信的其它裝置。調(diào)制解調(diào)器296可以是內(nèi)置或外置的,它通過串行端口接口268連接到總線248。在網(wǎng)絡(luò)化環(huán)境中,相對(duì)于個(gè)人計(jì)算機(jī)242描繪的程序模塊或者其部分可存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。將意識(shí)到,所示的網(wǎng)絡(luò)連接是示例性的,并且可以使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。
計(jì)算機(jī)還可包含模擬或數(shù)字調(diào)諧器組件298。調(diào)諧器組件可以通過諸如PCI等內(nèi)部或擴(kuò)展的總線或者通過諸如USB總線、IEEE-1394總線等外部總線鏈接到系統(tǒng)。調(diào)諧器組件允許系統(tǒng)通過標(biāo)準(zhǔn)電視廣播媒體,諸如陸地、電纜和衛(wèi)星來接收廣播電視。
通常,計(jì)算機(jī)242的數(shù)據(jù)處理器是通過在不同時(shí)間刻儲(chǔ)在計(jì)算機(jī)的各種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上的指令來編程的。程序和操作系統(tǒng)一般分布在例如軟盤或CD-ROM上。從軟盤或CD-ROM中,將它們安裝或加載到計(jì)算機(jī)的次級(jí)存儲(chǔ)器中。在執(zhí)行時(shí),至少部分地將它們加載到計(jì)算機(jī)的主電子存儲(chǔ)器中。當(dāng)這些和其它各種類型的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包含用于結(jié)合微處理器或其它數(shù)據(jù)處理器實(shí)現(xiàn)所述的模塊的指令或程序時(shí),在此描述的系統(tǒng)包括這些介質(zhì)。當(dāng)按照在此描述的方法和技術(shù)編程時(shí),所述系統(tǒng)還可以包括計(jì)算機(jī)本身。
為了說明,程序和諸如操作系統(tǒng)等其它可執(zhí)行程序組件在此被示出為離散的塊,盡管可以認(rèn)識(shí)到,這樣的程序和組件在不同的時(shí)刻駐留在計(jì)算機(jī)的不同存儲(chǔ)組件中,并且由計(jì)算機(jī)的數(shù)據(jù)處理器執(zhí)行。
盡管有關(guān)基于軟件的視頻呈現(xiàn)引擎的實(shí)施例已經(jīng)以專用于結(jié)構(gòu)特征和/或方法的語言來描述,但是要理解,所附權(quán)利要求書的主題不必限于所述的具體特征或方法。相反,具體特征和方法是作為基于軟件的視頻呈現(xiàn)的示例性實(shí)現(xiàn)來揭示的。
示例性音頻呈現(xiàn)實(shí)現(xiàn)圖3概括地在300處示出用于限制外部時(shí)鐘與基于軟件的音頻呈現(xiàn)時(shí)鐘之間累積的漂移的示例性基于軟件的音頻呈現(xiàn)過程。
在動(dòng)作302處,基于軟件的音頻呈現(xiàn)過程查明源采樣速率。源一般包含指示源采樣速率的某種基準(zhǔn),配置源樣本以該源采樣速率提供。例如,常見的源采樣速率是44.1千赫茲(KHz)。如果源采樣速率是44.1kHz,則源應(yīng)該相對(duì)于源或外部時(shí)鐘以44.1KHz產(chǎn)生樣本,并且音頻硬件應(yīng)該相對(duì)于音頻硬件時(shí)鐘以44.1KHz處理樣本。
在動(dòng)作304,基于軟件的音頻呈現(xiàn)過程選擇外部時(shí)鐘與基于軟件的音頻呈現(xiàn)過程使用的基于軟件的音頻呈現(xiàn)時(shí)鐘之間的漂移閾值(在下文稱為“閾值”)。閾值應(yīng)該足夠大,以提供對(duì)外部時(shí)鐘與音頻硬件時(shí)鐘之間的時(shí)鐘差的準(zhǔn)確測(cè)量,但要足夠小,而不產(chǎn)生值得注意的口型同步問題。例如,在一個(gè)且僅一個(gè)實(shí)例中,使用16ms的閾值。
在動(dòng)作306,基于軟件的音頻呈現(xiàn)過程測(cè)量相對(duì)于外部時(shí)鐘速率的基于軟件的音頻呈現(xiàn)時(shí)鐘速率。開始源的回放,使得在源處產(chǎn)生樣本、解碼、呈現(xiàn)并且隨后在音頻硬件上處理樣本。在一個(gè)實(shí)現(xiàn)中,基于軟件的音頻呈現(xiàn)過程跟蹤相對(duì)于源產(chǎn)生樣本的速率的、由音頻硬件消耗樣本的速率。使用測(cè)量到的差,該過程決定在該過程后面的動(dòng)作操縱音頻時(shí)鐘速率時(shí)使用的速率調(diào)整。速率調(diào)整參考下面討論的算法更詳細(xì)地討論。為了簡(jiǎn)單起見,在下面的討論中,假設(shè)為本例決定的速率調(diào)整值為每秒1個(gè)樣本。
在動(dòng)作308,基于軟件的音頻呈現(xiàn)過程跟蹤第一條件,直到基準(zhǔn)時(shí)鐘與音頻時(shí)鐘之間的漂移達(dá)到閾值。
為了說明起見,結(jié)合圖3考慮圖4。圖4概括地在400示出示例性基于軟件的音頻呈現(xiàn)時(shí)鐘同步過程的圖形表示。外部時(shí)鐘時(shí)間一般由線402指示?;谲浖囊纛l呈現(xiàn)時(shí)鐘時(shí)間一般由線404指示。為了示例的目的,假設(shè)響應(yīng)于用戶‘播放’命令,音頻時(shí)鐘和外部時(shí)鐘在406指示的時(shí)間零處同時(shí)開始。
也為了說明的目的,假設(shè)源速率是1,000赫茲。在外部時(shí)鐘的一秒的末尾,源已經(jīng)提供了1,000個(gè)樣本。同樣,設(shè)置硬件消耗速率,使得音頻硬件應(yīng)該在一秒內(nèi)處理1,000個(gè)樣本。然而,假設(shè)在外部時(shí)鐘的一秒的末尾,音頻硬件已經(jīng)消耗了1,002個(gè)樣本。因此相對(duì)于基準(zhǔn)時(shí)鐘速率,測(cè)量到的速率是每秒比基準(zhǔn)時(shí)鐘快兩個(gè)樣本。因此,音頻時(shí)鐘以測(cè)量到的每秒兩個(gè)樣本的速率漂移離開外部時(shí)鐘。這樣的一個(gè)實(shí)例一般由第一條件408示出,它在5秒后達(dá)到閾值410的漂移中達(dá)到頂點(diǎn)。
響應(yīng)于達(dá)到第一閾值,在動(dòng)作308,基于軟件的音頻呈現(xiàn)過程可以采取一個(gè)響應(yīng)動(dòng)作,它在動(dòng)作310過度糾正第一條件的漂移。例如,基于軟件的音頻呈現(xiàn)過程可以操縱音頻時(shí)鐘速率,引起在與第一條件相反的方向并且朝著第二閾值漂移,第二閾值具有與第一閾值相反的極性。為了便于說明,本例使用的相同的閾值大小10用于第一和第二閾值兩者。其它實(shí)現(xiàn)將使用比第一閾值大小小的第二閾值大小。
在這個(gè)實(shí)例中,該過程操縱音頻時(shí)鐘速率,使它達(dá)到在動(dòng)作306處確定的每秒一幀的速率調(diào)整值。在這個(gè)實(shí)例中,基于軟件的音頻呈現(xiàn)過程通過創(chuàng)建在412處概括地指示的第二條件來過度補(bǔ)償?shù)谝粭l件的漂移,其中音頻時(shí)鐘速率比測(cè)量到的時(shí)鐘速率慢。在第二條件中,基于軟件的音頻呈現(xiàn)時(shí)鐘有效地以與第一條件相反的方向漂移,但以較慢的速率,直到漂移離開測(cè)量到的速率的大小再次等于預(yù)定值,但在相反的方向上。
因此,例如,在第六秒開始的時(shí)段中,基于軟件的音頻呈現(xiàn)過程通過呈現(xiàn)從源接收到的1,000個(gè)幀中的某一些兩次來過度補(bǔ)償,使得更多的樣本在一秒跨度內(nèi)被呈現(xiàn)到音頻硬件。呈現(xiàn)樣本多次可被稱為‘插入’,因?yàn)橛绊懯莿?chuàng)建在采樣時(shí)段內(nèi)消耗的額外樣本。如先前確定的,音頻硬件可以在一秒內(nèi)處理1,002個(gè)。因此,基于軟件的呈現(xiàn)過程通過插入三個(gè)額外的樣本,呈現(xiàn)這三個(gè)幀兩次來操縱音頻時(shí)鐘。現(xiàn)在音頻時(shí)鐘具有有效的時(shí)鐘速率,它比測(cè)量到的速率略微慢一點(diǎn)。在第二條件412中,基于軟件的音頻呈現(xiàn)時(shí)鐘從5至15秒向后朝著外部時(shí)鐘漂移,在該點(diǎn)處漂移將開始以在第一條件中發(fā)生的相反方向累積。在該過程的25秒處,漂移將再次達(dá)到具有大小10的閾值410,但該大小的值與第一條件的相反,指示以與第一條件相反的方向漂移。
在動(dòng)作312并且響應(yīng)于達(dá)到第二條件中的閾值,可以操縱音頻時(shí)鐘速率,使得漂移向后朝著第一條件振蕩。在這個(gè)實(shí)例中,可以操縱音頻時(shí)鐘速率,使它比測(cè)量到的速率快與調(diào)整因子一致的量。例如,這樣的操縱可能必需在隨后幾秒內(nèi)抽取幀。抽取可以僅僅表示在要呈現(xiàn)的單位時(shí)間內(nèi)丟棄許多幀。
如此,上述插入或抽取的動(dòng)作可以用于使音頻時(shí)鐘速率圍繞測(cè)量到的速率振蕩。結(jié)果,音頻時(shí)鐘速率與測(cè)量到的速率之間累積的漂移被減少或消除。下面描述的算法提供一個(gè)改進(jìn)的實(shí)現(xiàn),其中漂移調(diào)整值可以調(diào)整到比在此所述的更精確的程度。
示例性算法下面的算法可以由基于軟件的音頻呈現(xiàn)過程用于減少或消除外部時(shí)鐘與基于軟件的音頻呈現(xiàn)時(shí)鐘之間的漂移。該算法可以通過在音頻時(shí)鐘比外部時(shí)鐘較慢的第一條件與音頻時(shí)鐘比外部時(shí)鐘較快的第二條件之間交替,消除基于軟件的音頻呈現(xiàn)時(shí)鐘與外部時(shí)鐘之間的累積漂移。
基于硬件時(shí)鐘的軟件時(shí)鐘實(shí)現(xiàn)可能是不完美的,因?yàn)樗艿椒直媛?、?zhǔn)確性和誤差累積及其它因素的限制。認(rèn)識(shí)到這一點(diǎn),下面的軟件時(shí)鐘同步算法允許音頻時(shí)鐘相對(duì)于外部時(shí)鐘在預(yù)定大小的正/負(fù)值(相反的極性)之間漂移。這樣一個(gè)實(shí)現(xiàn)可以提供對(duì)上述有害因素的免疫性。在某些情況下,軟件時(shí)鐘同步算法可提供對(duì)所有這類因素的完全的免疫性。這類實(shí)現(xiàn)與先前的嘗試相反,用直接的糾正響應(yīng)來對(duì)任何漂移作出反應(yīng)。這些先前的技術(shù)不能很好地工作,因?yàn)槠浦凳窃诜浅6痰臅r(shí)間段內(nèi)測(cè)量的,并且因此是很不可靠的?,F(xiàn)有解決方案的至少一個(gè)重要缺點(diǎn)是,軟件時(shí)鐘實(shí)現(xiàn)具有抖動(dòng),它一般是比在非常短的時(shí)間段內(nèi)測(cè)量的漂移大一點(diǎn)的大小。這常常導(dǎo)致錯(cuò)誤和不均衡的較大反應(yīng),它顯著降低音頻呈現(xiàn)質(zhì)量。
為了提供對(duì)時(shí)鐘漂移成比例且接近對(duì)稱的糾正,應(yīng)該對(duì)照外部時(shí)鐘與適當(dāng)長(zhǎng)的時(shí)段內(nèi)之比來測(cè)量音頻呈現(xiàn)速率,以產(chǎn)生測(cè)量到的漂移速率(測(cè)得速率)。測(cè)得速率隨后可以通過調(diào)整音頻硬件播放速率,或者通過調(diào)整音頻采樣速率(使用音頻重采樣技術(shù))在后續(xù)的漂移糾正中使用。后一技術(shù)幾乎等同于前一技術(shù)。然而音頻重采樣與底層音頻硬件無關(guān),并且因此減少或避免可能的音頻硬件限制,諸如速率調(diào)整分辨率和最大硬件速率。在下面的討論中,討論音頻采樣速率調(diào)整技術(shù)。然而,描述了一種算法,它適用于調(diào)整硬件播放速率,其中音頻硬件不強(qiáng)加諸如上面所述的那些限制。
如上所述,在回放時(shí),基于軟件的音頻呈現(xiàn)過程測(cè)量相對(duì)于外部時(shí)鐘的基于軟件的音頻呈現(xiàn)時(shí)鐘,直到漂移達(dá)到第一閾值。該過程隨后使用下列公式ΔS×T=ΔT×Sa(1)在公式(1)中,ΔS是音頻源速率乘以基于軟件的音頻呈現(xiàn)時(shí)鐘與外部時(shí)鐘之間在時(shí)鐘速率上的差,T是漂移超過閾值的時(shí)間,ΔT是閾值,而Sa是音頻源速率。應(yīng)該選擇一個(gè)閾值,它足夠大以提供對(duì)兩個(gè)時(shí)鐘之間的任何差的良好測(cè)量,但足夠小以不會(huì)產(chǎn)生口型同步問題。
因此,按照外部時(shí)鐘,音頻硬件以速率Sm提供音頻,其中Sm=Sa+ΔS (2)該公式是在音頻硬件播放速率的上下文中。如果音頻硬件播放速率被設(shè)置為源音頻速率,則經(jīng)調(diào)整的播放速率是ΔR=ΔT/T。
為了說明起見,假設(shè)基于軟件的音頻呈現(xiàn)時(shí)鐘比外部時(shí)鐘慢,盡管下面的數(shù)學(xué)方程與該假設(shè)無關(guān)。基于此假設(shè),則ΔS<0。由于ΔS可以非常小,所以下面的算法被配置成使用整數(shù)和定點(diǎn)數(shù)學(xué)用于計(jì)算。因此,該過程用右移來按比例縮放值。在本例中,使用右移值8,它等價(jià)于將這些值乘以256。該右移允許將原始音頻的速率重新采樣成與0.004Hz一樣小的速率。從這一點(diǎn)直到該示例的末尾,所有S值被認(rèn)為是按256比例縮放的。
在一個(gè)實(shí)例中,其中基于軟件的音頻呈現(xiàn)時(shí)鐘比外部時(shí)鐘慢,示例性基于軟件的音頻呈現(xiàn)過程重新采樣音頻數(shù)據(jù)至比原始采樣速率低的速率。因而,它使音頻硬件顯得用較高速率播放以反轉(zhuǎn)音頻時(shí)鐘漂移的方向。當(dāng)重新采樣音頻樣本至較低速率時(shí),該過程在采樣時(shí)段內(nèi)丟棄或抽取某個(gè)數(shù)量的樣本。
音頻硬件仍以相同速率消耗樣本。然而,音頻硬件消耗少于與采樣時(shí)段相關(guān)聯(lián)的總內(nèi)容。例如,假設(shè)音頻源速率為1kHz。因此,一秒包含1,000個(gè)樣本。音頻硬件應(yīng)該按照音頻硬件時(shí)鐘在一秒內(nèi)處理1,000個(gè)樣本。但假設(shè)相對(duì)于外部時(shí)鐘,音頻硬件只能在一秒內(nèi)處理999個(gè)樣本。如果該過程從價(jià)值一秒的內(nèi)容中丟棄一個(gè)樣本,則音頻硬件只需要消耗在外部時(shí)鐘的一秒時(shí)間段中相應(yīng)內(nèi)容的999個(gè)樣本,并且它在消耗這999個(gè)樣本時(shí)花費(fèi)的時(shí)間剛好是1秒。
采取這個(gè)動(dòng)作有效地使音頻硬件按照外部時(shí)鐘在一秒內(nèi)播放一秒內(nèi)容。當(dāng)然,內(nèi)容并不完全相同,因?yàn)檫@一千個(gè)樣本之中的一個(gè)樣本沒有為用戶處理。也可以使用其它算法,盡管這類算法可比在本例中描述的插入重新采樣算法使用更多的處理資源。例如,一維信號(hào)速率重新采樣算法使用3至5個(gè)抽頭的低通濾波器,諸如有限沖激響應(yīng)(FIR)濾波器,它能夠使速率重新采樣的音頻提供令人滿意的用戶體驗(yàn)。
人耳只能聽到具有大約30Hz到大約20,000Hz之間的頻率分量的聲音。大多數(shù)人類語音基本上低于3,000Hz。人耳在頻率接近20,000Hz時(shí)對(duì)聲音更不敏感。大多數(shù)消費(fèi)者質(zhì)量的數(shù)字音頻是以44,100赫茲(Hz)或者更高來采樣的,而不是這里主要為便于說明而選擇的1,000Hz。這是幾乎不是偶然的,因?yàn)槟慰固?Nyquist)原理規(guī)定被采樣的聲音信號(hào)可以再現(xiàn)任何頻率小于采樣速率一半的聲音。這意味著44,100Hz采樣的音頻可以準(zhǔn)確地再現(xiàn)直至22,050Hz的頻率分量,這很好地超過了人類可聽見的頻率范圍。
在使音頻呈現(xiàn)與外部源同步的情況下,音頻呈現(xiàn)硬件與外部源之間的時(shí)鐘差至多是幾赫茲,并且常常是一赫茲的很小一部分。因此,使用對(duì)幾千或幾萬音頻樣本中的單個(gè)音頻樣本的簡(jiǎn)單的復(fù)制或抽取比使用低通濾波器有效得多,并且將達(dá)到幾乎等同于消費(fèi)者質(zhì)量的音頻的質(zhì)量。作為說明,對(duì)于44,100Hz的數(shù)字采樣的音頻,音頻樣本持續(xù)略小于23微秒。假設(shè)該過程丟棄幾千樣本中的一個(gè)樣本,則或者這個(gè)音頻樣本在一個(gè)其毗鄰鄰值接近于它的值的區(qū)域中,或者它的兩個(gè)毗鄰鄰值之一或兩個(gè)都與它非常不同。在前一種情況下,丟棄該樣本很難產(chǎn)生人能感覺得到的任何波形失真。而在后一種情況下,被丟棄的樣本是這樣的一個(gè)高頻信號(hào)的樣本,該信號(hào)在非常短的時(shí)間顯著地改變,即該樣本在第一位置對(duì)于人類幾乎是聽不見的。
在某些配置中,音頻硬件可能沒有易于可讀的時(shí)間。相反,音頻時(shí)間可以從它的直接存儲(chǔ)器存取(DMA)指針位置導(dǎo)出。DMA指針指向音頻硬件正在獲得由諸如由音頻驅(qū)動(dòng)程序軟件提供的音頻軟件等音頻軟件提供的DMA緩沖器中的音頻樣本之處。這允許音頻驅(qū)動(dòng)程序確定當(dāng)讀取DMA指針時(shí)音頻硬件處理了多少音頻樣本。音頻時(shí)間增量是從由音頻硬件以音頻采樣速率消耗的音頻樣本的數(shù)量中導(dǎo)出的。在時(shí)段j內(nèi),其中音頻硬件在此時(shí)段內(nèi)以音頻采樣速率Sj消耗的音頻樣本量ΔAj從下式計(jì)算得到δtj=ΔAj/Sj(3)因此,基于軟件的音頻呈現(xiàn)過程自從進(jìn)入運(yùn)行狀態(tài)以來的總音頻時(shí)間是t=ΣjΔAj/Sj---(4)]]>因此公式4是對(duì)每個(gè)j的公式3的和。
這個(gè)特定的算法以與使用速率重新采樣相似的方式操縱音頻硬件播放速率來減少基于軟件的音頻呈現(xiàn)時(shí)鐘與外部時(shí)鐘之間的漂移。然而,用這個(gè)特定的算法,當(dāng)硬件音頻播放速率改變時(shí),音頻硬件消耗音頻樣本的速率在物理上改變。為此,就在音頻速率改變之前,讀取已經(jīng)消耗直至該點(diǎn)處的音頻樣本來確定消耗的音頻樣本量(ΔAj)。與用軟件速率重新采樣一樣,公式4用于計(jì)算音頻時(shí)間。
然而,測(cè)量到的速率仍可具有某種較小程度的誤差。音頻速率重新采樣,尤其使用不超過32位的定點(diǎn)數(shù)學(xué),具有有限的精度。結(jié)果,計(jì)算舍入誤差可累積。同樣,由于軟件執(zhí)行延遲等因素,外部時(shí)鐘具有一定量的抖動(dòng),它可以是與2微秒一樣大。這種軟件延遲可能是由操作系統(tǒng)和/或適用的應(yīng)用程序接口等引起的延遲所致。通過配置該算法以緩慢地圍繞音頻時(shí)鐘與外部時(shí)鐘之間的完美同步點(diǎn)搖擺,該算法減少或者免去這些誤差。換言之,音頻速率是Sc=Sm±δSc(5)其中δSc是保證當(dāng)使用Sm±δSc時(shí)音頻時(shí)鐘比外部時(shí)鐘略快,而在使用Sm-δSc時(shí)音頻時(shí)鐘比外部時(shí)鐘略慢,且符合下面條件的最小正值。配置這個(gè)特定算法,使得音頻時(shí)鐘在預(yù)定義的閾值的正和負(fù)值之間漂移。在前向或正漂移中累積的誤差將消除在后向或負(fù)漂移中累積的誤差。因此,該算法減少或消除了累積誤差。因此,可以選擇值,使得正負(fù)閾值之間的漂移時(shí)間沒有長(zhǎng)到足以使任何定點(diǎn)誤差累積變得顯著的程度。
在該過程獲得Sm之后的音頻時(shí)鐘時(shí)間是由δS0=sign(ΔS)×ΔS/2來計(jì)算的。其中除以2等同于整數(shù)值的左移。由此Sj=Sm+(-1)j+1×sign(ΔS)×δSj(6)以及δSj+1=δSj/2 (7)其中j<c以及δSj=δSc(8)其中j>=c。
在j=0,(-1)j+1×sign(ΔS)×δSj>0,等價(jià)的播放速率比外部時(shí)鐘速率快。因此,音頻時(shí)鐘從負(fù)值朝著正值漂移。音頻重采樣時(shí)間間隔是λj并且從下式計(jì)算λj=Sa/|Sa-Sj|(9)以及當(dāng)Sj>Sa時(shí)一次抽取剩余的和當(dāng)Sj<Sa時(shí)插入的是γj=1.0×Sa/|Sa-δSj|-λj(10)
重采樣過程使用定點(diǎn)計(jì)算來找出在哪里插入或抽取樣本。假設(shè)A在j增加時(shí)設(shè)置為零,在該點(diǎn)處音頻呈現(xiàn)過程設(shè)置重新采樣速率以倒轉(zhuǎn)漂移方向。只要音頻呈現(xiàn)過程接收到包含L個(gè)樣本的新音頻樣本緩沖區(qū)時(shí),A=A+L。如果A大于或等于音頻重采樣時(shí)間間隔(λj),則該過程從A中減去λj,使得A=A-λj。假設(shè)ρ是累積的剩余,并且當(dāng)A設(shè)置為零時(shí)將它設(shè)置為零,則該過程將γj添加到ρ。如果在該點(diǎn)處ρ大于或等于比例縮放后(在此為256)的1時(shí),則該過程在第(A+1)個(gè)樣本處插入/抽取一個(gè)樣本,并且設(shè)置ρ=ρ-256。否則,該過程插入/抽取第A個(gè)樣本。這個(gè)過程繼續(xù),直到A<λj。隨后,基于軟件的音頻呈現(xiàn)過程等待下一個(gè)音頻樣本緩沖區(qū)從音頻解碼器到來。重復(fù)這個(gè)過程,直到音頻呈現(xiàn)過程決定再次倒轉(zhuǎn)漂移方向,例如再次增加j。
在某些實(shí)現(xiàn)中,用公式6,該過程在j=0開始,其中音頻時(shí)鐘速率從負(fù)值漂移到0。在該點(diǎn)處,該過程設(shè)置最大漂移值為閾值。該過程還給閾值一個(gè)余量,使得當(dāng)該過程開始倒轉(zhuǎn)漂移方向時(shí),它允許音頻繼續(xù)漂移一點(diǎn)兒超過閾值。這是因?yàn)橐韵惹暗乃俾?j-1)重新采樣的數(shù)據(jù)此時(shí)可能不是完全由音頻硬件消耗的。一旦音頻漂移至大于或等于新的且最后設(shè)置的最大漂移值的正值,該過程就將j增加至值1。在這點(diǎn)處,音頻播放速率顯得比Sm慢。音頻開始朝著負(fù)值漂移。由于δS1值是δS0值的一半,所以漂移所用的時(shí)間大約是朝負(fù)閾值漂移的時(shí)間的兩倍。這個(gè)過程將重復(fù),直到j(luò)的增加不再倒轉(zhuǎn)漂移方向,這意味著增加的值不足以補(bǔ)償由音頻時(shí)鐘的軟件實(shí)現(xiàn)引入的誤差。在上述過程未能倒轉(zhuǎn)漂移方向的這樣一個(gè)時(shí)間,那么c=j(luò)-1是該過程試圖減少δS和到達(dá)收斂值δSc的時(shí)間。
如最初提到的,該過程還在正閾值與負(fù)閾值之間(或反之亦然)的音頻時(shí)鐘漂移上設(shè)置限制,將其限制于某個(gè)時(shí)間跨度,即例如15分鐘,以使該算法更能免于積累來自各種源的效應(yīng)。這可有效地在達(dá)到前面段落中描述的δSc之前在某些情況下設(shè)置δSc的最小值。由此,它意味著該過程將在時(shí)間跨度超過15分鐘時(shí)設(shè)置c=j(luò),使得δSj不再平分。有可能的是,如果ΔS特別小,δSc必須比δS0大,諸如2n×δS0。另一個(gè)條件是,最大采樣時(shí)間間隔限于231≥Sa/|Sa-Sj|,使得32位的定點(diǎn)數(shù)學(xué)始終可以用于音頻速率重采樣。基于公式2和6,也可在δSc的最小值上設(shè)置限制。有可能的是,δSc必須在于δS0,諸如2n×δS0。
為隨后的總結(jié),對(duì)于這個(gè)實(shí)現(xiàn),或者來自測(cè)得速率的經(jīng)調(diào)整的速率改變或速率調(diào)整增量應(yīng)該是允許音頻時(shí)鐘在閾值的正負(fù)值之間相對(duì)于外部時(shí)鐘連續(xù)地漂移的最小值,同時(shí)音頻時(shí)鐘用于在負(fù)閾值到正閾值漂移的時(shí)間大但不太大。例如,大約一分鐘到一小時(shí)或更長(zhǎng)的時(shí)間段等的值可以提供合適的實(shí)現(xiàn)。收斂速率調(diào)整增量的準(zhǔn)則用于針對(duì)音頻時(shí)鐘好象是與外部時(shí)鐘很好地同步但情況實(shí)際上是從軟件時(shí)鐘實(shí)現(xiàn)的非理想性所致的情況進(jìn)行保護(hù)。上面提到的接近對(duì)稱的糾正意味著,當(dāng)確定最終的速率調(diào)整增量時(shí),音頻時(shí)鐘從負(fù)閾值到正閾值漂移所用的時(shí)間與音頻時(shí)鐘從正閾值到負(fù)值漂移所用的時(shí)間大約是相同的。
示例性視頻呈現(xiàn)實(shí)現(xiàn)為了解釋顯示周期,一起考慮圖1和5。圖5表示分別一般由505、504和506處的基于軟件的視頻呈現(xiàn)引擎124跟蹤的三個(gè)連續(xù)的視頻幀AA、BB和CC的顯示周期的時(shí)間線500。在時(shí)間線500中,時(shí)間從左至右前進(jìn)。如在時(shí)間線500的最左區(qū)域描繪的,當(dāng)前幀AA的顯示周期一般是在502處指示的。如上提到的,顯示周期包括兩個(gè)掃描或VBI周期;在第一VBI中掃描偶半幀并且隨后在第二VBI周期中掃描奇半幀。每個(gè)VBI周期在不促進(jìn)圖象生成的VBI事件中達(dá)到頂點(diǎn)。
VBI事件508A劃分顯示周期502的末尾與幀BB的顯示周期的開始的分界線。顯示周期504包括第一或偶VBI周期510,以及第二或奇VBI周期512。為了顯示周期504正確地顯示來自幀BB的圖象,該幀應(yīng)該可用于圖形硬件就在VBI事件508A之前呈現(xiàn)。
這個(gè)呈現(xiàn)過程有時(shí)被稱為表面翻轉(zhuǎn)(surface flipping)或觸發(fā)(flip-flopping),其中新的幀BB從后緩沖器表面翻轉(zhuǎn)到前緩沖器表面以讓圖形硬件訪問,同時(shí)當(dāng)前幀AA相應(yīng)地從前向后翻轉(zhuǎn)。
幀BB的顯示周期504由在VBI事件508B中達(dá)到頂點(diǎn)的偶VBI周期510與在VBI事件508C中達(dá)到頂點(diǎn)的奇VBI周期512組成。響應(yīng)于VBI事件508B,呈現(xiàn)隨后的幀CC,使得它在顯示周期506中被掃描,在圖5中只表示了它的偶VBI周期。
兼容于標(biāo)準(zhǔn),電視編碼器128遵循定義的16.67ms的掃描周期或VBI周期。電視編碼器沒有故意偏離這個(gè)周期或者考慮到其它系統(tǒng)組件的操作。例如,電視編碼器沒有任何判斷力來縮短或延長(zhǎng)單獨(dú)VBI周期。每個(gè)顯示周期包括兩個(gè)VBI周期或33.34ms。圖形硬件126和電視編碼器128的VBI周期保持與電視編碼器時(shí)鐘或者與圖形硬件的圖形時(shí)鐘(未明確指定)有關(guān)。
基于軟件的呈現(xiàn)引擎124可以包括基于軟件的呈現(xiàn)時(shí)鐘(未明確指定)。通過監(jiān)控電視編碼器128和/或圖形硬件126的顯示周期,呈現(xiàn)引擎124的呈現(xiàn)時(shí)鐘可以相對(duì)于電視編碼器的顯示周期來調(diào)度事件。用于監(jiān)控顯示周期的過程的一個(gè)示例在下面參考圖5A-5B描述。
如圖1所示,基于軟件的視頻呈現(xiàn)引擎124從一個(gè)源接收視頻幀,該源可以在計(jì)算設(shè)備102的內(nèi)部或外部。視頻幀可以包括由諸如源時(shí)鐘等外部時(shí)鐘或基準(zhǔn)時(shí)鐘確定的提供時(shí)間或時(shí)間標(biāo)記。創(chuàng)建時(shí)間標(biāo)記的外部時(shí)鐘不知道電視編碼器或者甚至圖形硬件的時(shí)鐘的顯示周期?;谲浖囊曨l呈現(xiàn)引擎124監(jiān)控圖形硬件126的顯示周期,以預(yù)測(cè)該幀可以相對(duì)于圖形硬件的顯示周期顯示的實(shí)際時(shí)間。視頻呈現(xiàn)引擎124隨后基于這個(gè)預(yù)測(cè)確定何時(shí)呈現(xiàn)視頻幀至視頻硬件。而且,盡管基于軟件的視頻呈現(xiàn)引擎可以基于預(yù)測(cè)來調(diào)度呈現(xiàn),但基于軟件的視頻呈現(xiàn)引擎繼續(xù)監(jiān)控顯示周期以保證視頻幀在適當(dāng)?shù)臅r(shí)間呈現(xiàn)。
圖6示出一個(gè)示例,其中呈現(xiàn)引擎124確定單獨(dú)視頻幀的實(shí)際提供時(shí)間。時(shí)間線600描繪了100ms的持續(xù)時(shí)間。時(shí)間線用與單個(gè)VBI周期相關(guān)聯(lián)的16.67ms的增量來劃分界線。一組連續(xù)的兩個(gè)VBI周期(或33.34ms)定義了一個(gè)顯示周期,而在本例中示出三個(gè)顯示周期604、606和608。第一顯示周期604顯示視頻幀DD。第二顯示周期606顯示視頻幀EE,而第三顯示周期608顯示第三視頻幀F(xiàn)F。
視頻幀EE具有20ms的提供時(shí)間標(biāo)記610。為了說明的目的,假設(shè)確定時(shí)間標(biāo)記的時(shí)鐘與顯示周期同步。通過監(jiān)控電視編碼器的顯示周期,基于軟件的呈現(xiàn)引擎124知道正在從0.0ms起直到33.34ms掃描視頻幀DD,并且因此視頻幀EE的實(shí)際提供只能在此時(shí)之后才能開始。因此,基于軟件的呈現(xiàn)引擎知道視頻幀EE的實(shí)際提供時(shí)間應(yīng)該是下一個(gè)顯示周期606,它在33.35ms開始并運(yùn)行到66.67ms。
同樣,視頻幀F(xiàn)F具有40ms的提供時(shí)間612?;谲浖某尸F(xiàn)引擎知道下一個(gè)可用的顯示周期608在66.68ms開始,因此實(shí)際的提供時(shí)間隨后將開始。呈現(xiàn)引擎可以調(diào)度以在顯示周期606的后半段中呈現(xiàn)視頻幀F(xiàn)F?;谲浖某尸F(xiàn)引擎沒有調(diào)度以在顯示周期606的前半段中呈現(xiàn)幀F(xiàn)F,即使它可能更接近于時(shí)間標(biāo)記提供時(shí)間612,因?yàn)榭赡墚a(chǎn)生不希望的結(jié)果。這樣的不希望結(jié)果在下面參考圖5A-5B更詳細(xì)地描述。
圖6示出基于軟件的視頻呈現(xiàn)引擎如何能夠確定單獨(dú)視頻幀的實(shí)際提供時(shí)間并相應(yīng)地呈現(xiàn)它們。各種系統(tǒng)配置在呈現(xiàn)側(cè)和/或圖形硬件側(cè)可具有某種程度的延遲。某些實(shí)現(xiàn)可以將這種延遲計(jì)算在內(nèi)來計(jì)算更準(zhǔn)確的實(shí)際提供時(shí)間和/或來調(diào)度呈現(xiàn)時(shí)間?;谲浖囊曨l呈現(xiàn)引擎也可將單獨(dú)視頻幀的實(shí)際呈現(xiàn)時(shí)間傳送給音頻解碼器114和/或音頻呈現(xiàn)引擎116,使得音頻呈現(xiàn)時(shí)間可相應(yīng)地調(diào)整。
如上所述,如有所需,基于軟件的視頻呈現(xiàn)引擎可以監(jiān)控顯示周期以確定單獨(dú)視頻幀的呈現(xiàn)和/或提供時(shí)間。基于軟件的視頻呈現(xiàn)引擎不需要依賴于這些預(yù)定值,因?yàn)樗鼜娘@示周期剛開始繼續(xù)取得諸如VBI信號(hào)等實(shí)時(shí)信號(hào),直到它呈現(xiàn)視頻幀。某些實(shí)現(xiàn)可以基于實(shí)時(shí)信號(hào)而不是預(yù)定的時(shí)間最后呈現(xiàn)視頻幀。
通過按照視頻硬件的顯示周期呈現(xiàn)視頻幀,所得的運(yùn)動(dòng)視頻的用戶體驗(yàn)可以得到增強(qiáng)。用于監(jiān)控顯示周期以確定何時(shí)呈現(xiàn)視頻幀的示例性過程在下面參考圖7A-7B描述。
示例性視頻呈現(xiàn)過程圖7A-7B表示用于呈現(xiàn)視頻數(shù)據(jù)的基于軟件的過程。這個(gè)特定的實(shí)現(xiàn)基于在美國(guó)等國(guó)家使用的由國(guó)家電視標(biāo)準(zhǔn)委員會(huì)(NTSC)建立的標(biāo)準(zhǔn)。下面描述的概念適于其它標(biāo)準(zhǔn),諸如在歐洲、數(shù)字多功能盤(DVD)和480p等中使用的逐行倒相(PAL)等等。在僅一個(gè)配置中,該過程可以使用諸如參考圖1和2描述的系統(tǒng)等系統(tǒng)來實(shí)現(xiàn)。所述的基于軟件的視頻呈現(xiàn)過程包括動(dòng)作702-734。動(dòng)作702-724一般涉及視頻呈現(xiàn)過程,而動(dòng)作726-734一般涉及解決外部時(shí)鐘與呈現(xiàn)過程時(shí)鐘之間可能的時(shí)鐘漂移?;谲浖囊曨l呈現(xiàn)過程在動(dòng)作702開始啟動(dòng)過程。
在動(dòng)作702,基于軟件的視頻呈現(xiàn)過程響應(yīng)于正在由用戶打開的媒體播放器應(yīng)用創(chuàng)建呈現(xiàn)引擎線程。該過程隨后等待運(yùn)行事件信號(hào),諸如來自用戶的播放命令。圖形硬件在VBI循環(huán)期間遇到特定的中斷行時(shí)生成一個(gè)中斷信號(hào)。中斷信號(hào)中斷CPU。作為響應(yīng),CPU通知中斷信號(hào)的出現(xiàn)和生成它的中斷行。CPU將中斷信號(hào)傳送給驅(qū)動(dòng)程序中斷處理程序。CPU檢查等待線程隊(duì)列,并且如果CPU標(biāo)識(shí)正在等待中斷信號(hào)的線程,則CPU將所標(biāo)識(shí)的線程從等待線程隊(duì)列移動(dòng)到就緒線程隊(duì)列。在這一情況下,呈現(xiàn)引擎線程正在等待中斷信號(hào),并且被移到就緒線程隊(duì)列。CPU隨后將檢查視頻呈現(xiàn)引擎線程相對(duì)于任何當(dāng)前運(yùn)行的線程的優(yōu)先級(jí),并且如果視頻呈現(xiàn)引擎線程具有優(yōu)先級(jí),則CPU將運(yùn)行視頻呈現(xiàn)引擎線程并將當(dāng)前的線程移動(dòng)到就緒隊(duì)列。該過程隨后等待來自視頻解碼過程的第一視頻樣本或幀的到達(dá)。
在動(dòng)作704,在可用于基于軟件的視頻呈現(xiàn)過程的緩沖器處視頻幀到達(dá)后,該過程查詢系統(tǒng)是否為新幀準(zhǔn)備好。這個(gè)動(dòng)作允許該過程檢查系統(tǒng)的運(yùn)行狀態(tài)以保證視頻幀是實(shí)際想要的。這個(gè)動(dòng)作減少浪費(fèi)處理能力和/或其它資源的機(jī)會(huì)。例如,用戶可按下‘播放’,但在該過程到達(dá)這個(gè)點(diǎn)時(shí),用戶可能已經(jīng)按下‘暫?!蛘哂脩艨赡芤呀?jīng)改變了頻道,從而消除了呈現(xiàn)視頻幀的需求。在本例中,如果用戶按下暫停,則系統(tǒng)沒有為新幀準(zhǔn)備好。如果視頻幀不是想要的,則該過程返回到動(dòng)作702。
如果視頻幀是想要的,則基于軟件的視頻呈現(xiàn)過程獲得VBI周期的VBI極性(動(dòng)作706)。VBI周期在與顯示設(shè)備合作以從給定的視頻幀產(chǎn)生圖象的硬件子系統(tǒng)上發(fā)生。每個(gè)視頻幀顯示一個(gè)顯示周期,它包括兩個(gè)VBI周期。第一或偶VBI周期掃描視頻幀的偶半幀。第二或奇數(shù)VBI周期掃描視頻幀的奇半幀。通過獲得VBI極性,該過程知道一個(gè)單獨(dú)幀的顯示周期是在第一VBI周期中還是在第二VBI周期中。顯示周期和VBI周期的示例在上面參考2-3描述。
為了說明的目的,假設(shè)該過程獲得奇VBI極性。通過獲得奇VBI極性,該過程知道當(dāng)前幀的第二半幀正在由電視編碼器128掃描。
在動(dòng)作708,基于軟件的視頻呈現(xiàn)過程等待下一個(gè)VBI信號(hào)。如上所述,VBI事件在VBI周期的末尾發(fā)生,并且指示VBI周期的垂直消隱階段的開始。圖形硬件在每個(gè)VBI事件創(chuàng)建VBI信號(hào),并且該VBI信號(hào)由基于軟件的視頻呈現(xiàn)引擎檢測(cè)。在掃描偶半幀的末尾接收到VBI信號(hào),指示下一個(gè)VBI周期將具有奇極性。同樣,在掃描了奇半幀之后接收到VBI信號(hào),指示下一個(gè)VBI周期將具有偶極性。因此,在收到將偶VBI周期與奇VBI周期分開的VBI信號(hào)之后,指示當(dāng)前幀的顯示周期就在下一個(gè)VBI信號(hào)之前完成。通過獲得VBI極性并且等待VBI信號(hào),基于軟件的視頻呈現(xiàn)過程可以調(diào)度以在接近的奇VBI周期中呈現(xiàn)下一幀。
在動(dòng)作710,基于軟件的視頻呈現(xiàn)過程跟蹤VBI周期。通過跟蹤VBI周期,該過程不需要重新查明VBI極性(這將比獲得單個(gè)VBI周期占用更多的時(shí)間)。通過最初獲得VBI極性并且隨后跟蹤VBI周期,基于軟件的視頻呈現(xiàn)引擎知道每個(gè)顯示周期相對(duì)于視頻呈現(xiàn)引擎的視頻呈現(xiàn)時(shí)鐘的點(diǎn)。除了其它優(yōu)點(diǎn),該特征可以允許基于軟件的視頻呈現(xiàn)引擎避免在只有掃描了當(dāng)前幀的偶周期之后才呈現(xiàn)新的幀。缺少這樣一種技術(shù),某些現(xiàn)有的過程能導(dǎo)致這樣的場(chǎng)景,其中調(diào)度新的幀在偶半幀VBI周期內(nèi)呈現(xiàn),使得當(dāng)前幀的第二或奇周期被省略,而在它的位置掃描新的幀。這樣一個(gè)場(chǎng)景可以導(dǎo)致令人不太愉快的用戶體驗(yàn)。在這樣一個(gè)情況下,新幀可以用相反的時(shí)間順序掃描。例如,奇半幀然后偶半幀,而不偶半幀然后奇半幀,這可以進(jìn)一步減少用戶滿意度。
此外,通過跟蹤VBI周期,基于軟件的視頻呈現(xiàn)引擎可以相應(yīng)地更新視頻呈現(xiàn)時(shí)鐘,因?yàn)槊總€(gè)VBI周期基于圖形時(shí)鐘精確地占用16.67ms。因此,例如,每當(dāng)檢測(cè)到VBI信號(hào)時(shí),視頻呈現(xiàn)時(shí)鐘可以相應(yīng)地上移。這允許呈現(xiàn)過程更準(zhǔn)確地用顯示周期來定時(shí)它的活動(dòng)。例如,可以有軟件呈現(xiàn)引擎在某些VBI周期內(nèi)完成的其它任務(wù)。
可供替換地或除此之外,在圖形時(shí)鐘與基準(zhǔn)時(shí)鐘之間的時(shí)鐘漂移也可以通過在檢測(cè)到每個(gè)VBI事件時(shí)更新視頻呈現(xiàn)時(shí)鐘并且將視頻呈現(xiàn)時(shí)鐘與基準(zhǔn)時(shí)鐘的時(shí)間進(jìn)行比較來推斷。
如將在下面更詳細(xì)地討論的,動(dòng)作710的時(shí)鐘同步過程可以允許基于軟件的視頻呈現(xiàn)過程從屬于來自諸如陸地、電纜和衛(wèi)星源等標(biāo)準(zhǔn)電視廣播媒體的直播視頻源時(shí)鐘。
而且,如下面將更詳細(xì)地討論的,保持準(zhǔn)確的視頻呈現(xiàn)時(shí)鐘允許基于軟件的視頻呈現(xiàn)過程同步其它組件和/或提供。例如,基于軟件的視頻呈現(xiàn)過程可確定從給定的視頻幀生成圖象的實(shí)際時(shí)間。
基于軟件的視頻呈現(xiàn)過程隨后可使用實(shí)際提供時(shí)間來減少音視頻不一致性。例如,基于軟件的視頻呈現(xiàn)過程可將一個(gè)視頻幀的實(shí)際顯示時(shí)間傳送給音頻解碼器和/或音頻呈現(xiàn)引擎,使得音頻和視覺方面可以同步。
例如,在當(dāng)前幀的奇半幀的開始處接收到VBI信號(hào)時(shí),基于軟件的視頻呈現(xiàn)過程知道它將在大約16.67ms內(nèi)接收到下一個(gè)VBI信號(hào)時(shí)呈現(xiàn)下一幀。基于軟件的視頻呈現(xiàn)過程還知道對(duì)下一幀的掃描將及時(shí)在該點(diǎn)處開始。因此,基于軟件的視頻呈現(xiàn)過程可指示音頻呈現(xiàn)引擎在16.67ms后呈現(xiàn)相關(guān)聯(lián)的音頻包。這樣一個(gè)同步過程可以在明確的上限內(nèi)產(chǎn)生音視頻同步,該上限遠(yuǎn)低于人類的感覺。
在動(dòng)作712,基于軟件的視頻呈現(xiàn)過程再次檢查系統(tǒng)是否為新的幀準(zhǔn)備好。這個(gè)步驟檢查系統(tǒng)的運(yùn)行狀態(tài),以保證資源不浪費(fèi)在不需要的呈現(xiàn)上。如果系統(tǒng)沒有為下一幀準(zhǔn)備好(即“否”分支),則該過程等待直到系統(tǒng)準(zhǔn)備好。一旦系統(tǒng)準(zhǔn)備好(即,“是”分支),則確定基于軟件的視頻呈現(xiàn)過程是否在呈現(xiàn)周期內(nèi)(動(dòng)作714)。例如,基于軟件的視頻呈現(xiàn)過程可檢查以查看它是否被調(diào)度為在下一個(gè)33.34ms內(nèi)呈現(xiàn)幀。這樣的調(diào)度的一個(gè)示例在上面參考圖3描述。
除了其它屬性,這個(gè)動(dòng)作可以允許改進(jìn)的資源分配。如果基于軟件的視頻呈現(xiàn)過程預(yù)知保留一定量的資源的愿望,最值得注意的是圖形硬件資源,則隨后在視頻呈現(xiàn)周期中,基于軟件的視頻呈現(xiàn)過程保持為它保留的資源。如果基于軟件的視頻呈現(xiàn)過程完成在給定呈現(xiàn)周期中的視頻呈現(xiàn),則基于軟件的視頻呈現(xiàn)過程可讓其它過程使用它保留的部分處理資源。通過跟蹤顯示周期和/或VBI周期,可以有將為基于軟件的視頻呈現(xiàn)過程保留的處理資源重新分配給其它處理任務(wù)的時(shí)候。跟蹤VBI周期并且更新視頻呈現(xiàn)時(shí)鐘允許基于軟件的視頻呈現(xiàn)過程知道何時(shí)應(yīng)該為基于軟件的視頻呈現(xiàn)過程保留資源以及它們何時(shí)可用于其它處理任務(wù)。
例如,假設(shè)在基于軟件的視頻呈現(xiàn)過程可以調(diào)度呈現(xiàn)VBI周期中的表面翻轉(zhuǎn)之前,基于軟件的視頻呈現(xiàn)過程需要一個(gè)特定圖形硬件單元來執(zhí)行特定的操作任務(wù)。表面翻轉(zhuǎn)在上面參考圖2描述。而且,假設(shè)諸如用戶界面(UI)模塊等其它模塊使用相同的圖形硬件單元。基于軟件的視頻呈現(xiàn)過程將優(yōu)先級(jí)給予呈現(xiàn)過程,使得呈現(xiàn)過程可以及時(shí)地完成它的任務(wù)。一旦呈現(xiàn)過程已經(jīng)完成其調(diào)度的任務(wù),就可允許諸如UI模塊等其它組件使用處理資源。
用于保證基于軟件的視頻呈現(xiàn)過程能夠及時(shí)完成它的處理任務(wù)的一種技術(shù)是,允許基于軟件的視頻呈現(xiàn)過程準(zhǔn)予或拒絕希望對(duì)圖形單元發(fā)出任何任務(wù)的其它軟件模塊對(duì)圖形單元的訪問。例如,基于軟件的視頻呈現(xiàn)過程可測(cè)量基于軟件的視頻呈現(xiàn)過程應(yīng)該保留的圖形單元資源的百分比。在一種極端情況下,如果基于軟件的視頻呈現(xiàn)過程需要100%的圖形單元資源,則基于軟件的視頻呈現(xiàn)過程可以確定最后的時(shí)間跨度,在該時(shí)間跨度內(nèi),基于軟件的視頻呈現(xiàn)過程應(yīng)該具有100%的圖形單元資源,以在呈現(xiàn)VBI周期期滿之前成功調(diào)度表面翻轉(zhuǎn)。因此,基于軟件的視頻呈現(xiàn)過程可以相應(yīng)地限制或門控其它軟件模塊對(duì)圖形單元的使用。例如,基于軟件的視頻呈現(xiàn)過程可以就在基于軟件的視頻呈現(xiàn)過程調(diào)度表面翻轉(zhuǎn)之后接通資源門,但只允許UI模塊使用某個(gè)百分比的圖形單元直至將來的某個(gè)時(shí)間。隨后基于軟件的視頻呈現(xiàn)過程關(guān)斷呈現(xiàn)門至其它軟件模塊,使得調(diào)度的所有任務(wù)將在進(jìn)入呈現(xiàn)VBI周期的某個(gè)時(shí)間之前完成,使得基于軟件的視頻呈現(xiàn)過程可調(diào)度的這些任務(wù)將在呈現(xiàn)VBI周期期滿之前具有足夠安全的余量來允許基于軟件的視頻呈現(xiàn)過程調(diào)度表面翻轉(zhuǎn)。
如果基于軟件的視頻呈現(xiàn)過程不在呈現(xiàn)周期中,則該過程前進(jìn)至動(dòng)作716。如果該過程在呈現(xiàn)周期中,則該該過程前進(jìn)至動(dòng)作718。
在動(dòng)作716,基于軟件的視頻呈現(xiàn)過程釋放翻轉(zhuǎn)的表面,即先前被掃描的幀。注意,如先前討論的,附著于后表面的存儲(chǔ)器緩沖器已經(jīng)與前表面的交換過了。因此該過程可以釋放當(dāng)前的后表面以及它附著的緩沖器來緩沖隊(duì)列。視頻解碼器可以獲得釋放的緩沖器,以便按照提供時(shí)間標(biāo)記的順序用新解碼的視頻幀來填充緩沖器。這樣一個(gè)緩沖器在圖1中指示為視頻緩沖器122B。在這點(diǎn)上,該過程前進(jìn)至動(dòng)作708。
在動(dòng)作718,其中基于軟件的視頻呈現(xiàn)過程在呈現(xiàn)VBI周期中,該過程檢查下一幀是否可用。在某些配置中,下一視頻幀應(yīng)該可用于基于軟件的視頻呈現(xiàn)過程從緩沖器FIFO隊(duì)列,諸如從參考圖1所述的緩沖器122A中獲得和消耗。這個(gè)特定的FIFO緩沖器隊(duì)列是由基于軟件的視頻解碼過程按照幀提供時(shí)間標(biāo)記的時(shí)間順序來填充的。在一種情況下,基于軟件的視頻解碼過程已經(jīng)解碼了一個(gè)或多個(gè)幀,并且已經(jīng)將它們填充到從如參考圖1描述的視頻緩沖器122B獲得的緩沖器中,并且將視頻幀放到圖1的視頻緩沖器122A中以供基于軟件的視頻呈現(xiàn)引擎接收。在另一種情況下,假信號(hào)可阻止基于軟件的視頻解碼過程及時(shí)傳送下一個(gè)視頻幀。如果這后一種情況發(fā)生,并且下一個(gè)視頻幀在VBI呈現(xiàn)周期內(nèi)不可用,則基于軟件的視頻呈現(xiàn)過程前進(jìn)到動(dòng)作720。如果下一幀可用,則基于軟件的視頻呈現(xiàn)過程將它取出隊(duì)列并且前進(jìn)到動(dòng)作724。
在動(dòng)作720,由于基于軟件的解碼過程沒有及時(shí)傳送視頻幀,則基于軟件的視頻呈現(xiàn)過程將當(dāng)前顯示的視頻幀的顯示延長(zhǎng)一個(gè)或多個(gè)VBI周期。一種方法是將當(dāng)前幀延長(zhǎng)另外兩個(gè)VBI周期或大約34ms。該過程隨后前進(jìn)至動(dòng)作722。
在動(dòng)作722,為了允許基于軟件的視頻解碼過程補(bǔ)足損失并且允許解碼過程趕上,基于軟件的視頻呈現(xiàn)過程指示解碼過程丟棄后續(xù)的視頻幀。
通過允許基于軟件的視頻解碼過程選擇要丟棄的后續(xù)幀來補(bǔ)償新近幀,可節(jié)省處理資源。例如,假設(shè)壓縮的視頻流包含基準(zhǔn)幀和非基準(zhǔn)幀?;谲浖囊曨l解碼過程必須解碼將用于解碼其它幀的所有基準(zhǔn)幀。因此,解碼過程可以選擇不解碼非基準(zhǔn)幀。通常,非基準(zhǔn)幀用幾倍的系統(tǒng)資源來解碼。一個(gè)或多個(gè)非基準(zhǔn)幀通常在兩個(gè)基準(zhǔn)幀之間出現(xiàn)。因此,通過不解碼非基準(zhǔn)幀,基于軟件的視頻解碼過程可以趕上不超過兩幀的時(shí)間。例如,如果要解碼的下一幀是非基準(zhǔn)幀,則視頻解碼器可以丟棄該幀。如果下一幀是基準(zhǔn)幀,則隨后的幀應(yīng)該是非基準(zhǔn)幀,且視頻解碼器可以丟棄該幀。這允許被顯示的視頻幀的提供時(shí)間標(biāo)記與相應(yīng)呈現(xiàn)的音頻樣本的提供時(shí)間標(biāo)記偏差34ms或小于兩個(gè)顯示周期或更少,并且隨后可重新同步音頻和視頻。
作為一個(gè)具體示例,諸如MPEG-2/4/10或WMV9視頻等基于標(biāo)準(zhǔn)的視頻壓縮的主要概況包含B(雙向預(yù)測(cè))幀,它們不必解碼,因?yàn)锽幀不用作用于構(gòu)建其它幀的基準(zhǔn)幀。B幀還在與其它幀類型比較時(shí)占用更多的系統(tǒng)資源來解碼。因此,基于軟件的視頻解碼過程可選擇不解碼它在接收到動(dòng)作722的丟棄幀命令之后遇到的第一個(gè)B幀。
圖7A中未示出的一種可供替換的方法是延長(zhǎng)當(dāng)前幀以只多顯示一個(gè)VBI周期并且將下一個(gè)VBI周期指定為呈現(xiàn)周期。如果新視頻幀在下一個(gè)VBI周期中可用,則新幀就只顯示一個(gè)VBI周期。這個(gè)方案可限于在下4個(gè)VBI周期內(nèi)每次動(dòng)作720發(fā)生時(shí)一次。在單個(gè)發(fā)生之后,當(dāng)前幀可以顯示另外兩個(gè)VBI周期,如在動(dòng)作720所述,以允許視頻解碼過程趕上來。
在動(dòng)作722的可替換情況中,如果基于軟件的視頻呈現(xiàn)過程在調(diào)度的呈現(xiàn)時(shí)間之后接收到下一個(gè)視頻幀,使得下一個(gè)顯示周期已經(jīng)再次在當(dāng)前幀上開始,則基于軟件的視頻呈現(xiàn)過程確定顯示周期是否在顯示周期的前半段中。如果下一個(gè)視頻幀是在顯示周期的前半段中接收的,即在第一或偶VBI周期中接收的,則該過程呈現(xiàn)新近到達(dá)的幀并且前進(jìn)到動(dòng)作730,好象視頻幀被及時(shí)呈現(xiàn)一樣。這個(gè)過程步驟允許從解碼器新近到達(dá)的幀顯示其顯示周期的后一半。在動(dòng)作722指示視頻解碼器丟棄幀的情況下,基于軟件的視頻呈現(xiàn)過程前進(jìn)至動(dòng)作708。
在動(dòng)作724,基于軟件的視頻呈現(xiàn)過程獲得下一視頻幀。
在動(dòng)作725,基于軟件的視頻呈現(xiàn)過程檢查下一視頻幀是否繼續(xù)前一幀。基于軟件的視頻呈現(xiàn)過程參考正在處理的幀的提供時(shí)間標(biāo)記,檢查由動(dòng)作724獲得的視頻幀的提供時(shí)間標(biāo)記的連續(xù)性。這個(gè)檢查排除了由動(dòng)作722引起的任何不連續(xù)性。如果不連續(xù)性存在,則基于軟件的視頻呈現(xiàn)過程前進(jìn)至動(dòng)作726。如果這些幀是連續(xù)的,則基于軟件的視頻呈現(xiàn)過程前進(jìn)至動(dòng)作728。
在動(dòng)作726,由于不連續(xù)性存在,所以基于軟件的視頻呈現(xiàn)過程將當(dāng)前幀顯示延長(zhǎng)至前一幀的提供時(shí)間標(biāo)記與下一幀的提供時(shí)間標(biāo)記之間的差。
可以引起下一幀與前一幀之間這樣的不連續(xù)性的一個(gè)示例可以在用基于軟件的視頻呈現(xiàn)過程播放諸如DVD電影等DVD的上下文中發(fā)生。在這樣一個(gè)示例中,DVD菜單可在電影的視頻流內(nèi)向用戶顯示。在一個(gè)這樣的情況下,由用戶命令調(diào)用和/或移除菜單。例如,如果用戶選擇‘暫?!胤?,則可插入表示菜單并且指示暫停條件的幀作為視頻流中的視頻幀。因此,DVD菜單不是電影的視頻流的一部分。而且,電影的視頻幀具有由源插入的時(shí)間標(biāo)記。菜單可以包括或可以不包括時(shí)間標(biāo)記。如果菜單具有時(shí)間標(biāo)記,則它有可能與電影幀的時(shí)間標(biāo)記有很少相關(guān)性或沒有相關(guān)性。因此,每當(dāng)從視頻流插入或移除菜單時(shí),它產(chǎn)生不連續(xù)性。注意,如果用戶調(diào)用,DVD菜單可以在任何時(shí)候出現(xiàn)。而且,還難以精確地決定一個(gè)靜止幀顯示多久,因?yàn)橛脩艨稍谌魏螘r(shí)間作出選擇。如果用戶恢復(fù)先前的播放條件,則菜單幀隨后被移除,在視頻流中造成另一個(gè)不連續(xù)性。在延長(zhǎng)下一幀的顯示時(shí)間之后,基于軟件的視頻呈現(xiàn)過程隨后返回至動(dòng)作708。
在動(dòng)作728,基于軟件的視頻呈現(xiàn)過程調(diào)度下一視頻幀的呈現(xiàn)。呈現(xiàn)下一幀的動(dòng)作可以通過翻轉(zhuǎn)包含下一幀緩沖器來完成。
上述基于軟件的視頻呈現(xiàn)過程步驟通過過程步驟704-708監(jiān)控顯示周期。基于軟件的視頻呈現(xiàn)過程在接收到在掃描當(dāng)前幀的偶半幀的頂點(diǎn)處生成的實(shí)時(shí)VBI信號(hào)后,隨后呈現(xiàn)下一幀(如果可用)。呈現(xiàn)過程不必是這個(gè)精度。其它示例性過程可監(jiān)控顯示周期,并且在當(dāng)前幀的顯示周期超過一半完成之后的任何時(shí)候呈現(xiàn)下一幀。如上面參考圖2所述,一旦當(dāng)前幀的半幀被翻轉(zhuǎn)用于掃描,則可以呈現(xiàn)下一幀,并且視頻硬件將直到下一個(gè)顯示周期才掃描它。因此,例如,某些基于軟件的視頻呈現(xiàn)過程一查明下游組件正在開始當(dāng)前顯示周期的后半段,就可呈現(xiàn)下一幀。
在動(dòng)作728之后,基于軟件的視頻呈現(xiàn)過程前進(jìn)至?xí)r鐘同步子例程,該子例程在返回至動(dòng)作708之前在動(dòng)作730開始,以重復(fù)呈現(xiàn)過程。在動(dòng)作730,基于軟件的視頻呈現(xiàn)過程計(jì)算視頻呈現(xiàn)時(shí)鐘時(shí)間和基準(zhǔn)時(shí)鐘之間的任何差。比較基準(zhǔn)時(shí)鐘與視頻呈現(xiàn)時(shí)鐘是在上面參考動(dòng)作710描述的。如果視頻呈現(xiàn)時(shí)鐘時(shí)間與基準(zhǔn)時(shí)鐘時(shí)間之間的差的絕對(duì)值比幀顯示周期持續(xù)時(shí)間小,則基于軟件的視頻呈現(xiàn)過程前進(jìn)至步驟708。
如果視頻呈現(xiàn)時(shí)鐘時(shí)間與基準(zhǔn)時(shí)鐘時(shí)間之間的差是比視頻幀顯示周期大的正值,它指示視頻呈現(xiàn)時(shí)鐘或圖形硬件時(shí)鐘比基準(zhǔn)時(shí)鐘快,則基于軟件的視頻呈現(xiàn)過程前進(jìn)至動(dòng)作732。
如果視頻呈現(xiàn)時(shí)鐘時(shí)間與基準(zhǔn)時(shí)鐘時(shí)間之間的差視頻是比視頻幀顯示周期大的負(fù)值,它指示視頻呈現(xiàn)時(shí)鐘或圖形硬件時(shí)鐘比基準(zhǔn)時(shí)鐘慢,則基于軟件的視頻呈現(xiàn)過程前進(jìn)至動(dòng)作734。
在動(dòng)作732,基于軟件的視頻呈現(xiàn)過程顯示下一幀四個(gè)VBI周期而不是正常的兩個(gè)VBI周期。換言之,基于軟件的視頻呈現(xiàn)過程通過指定第四個(gè)VBI周期作為下一個(gè)呈現(xiàn)VBI周期而不是第二個(gè)VBI周期,加倍下一視頻幀的顯示時(shí)間?;谲浖囊曨l呈現(xiàn)過程還從視頻時(shí)鐘時(shí)間推斷一個(gè)視頻幀的時(shí)間量?;谲浖囊曨l呈現(xiàn)過程隨后返回動(dòng)作708以重復(fù)呈現(xiàn)過程。
在動(dòng)作734,基于軟件的視頻呈現(xiàn)過程指示視頻解碼器丟棄幀,并且將視頻時(shí)鐘時(shí)間增加一個(gè)視頻幀的時(shí)間量。一個(gè)非常相似的原則可以在晚了任何數(shù)量的顯示周期時(shí)接收到下一幀時(shí)應(yīng)用。基于軟件的視頻呈現(xiàn)過程隨后返回至動(dòng)作708以重復(fù)呈現(xiàn)過程。
作為在動(dòng)作732和/或動(dòng)作734完成的視頻時(shí)鐘調(diào)整的結(jié)果,將視頻時(shí)鐘漂移時(shí)間恢復(fù)到一個(gè)視頻幀時(shí)間內(nèi),或者基準(zhǔn)時(shí)鐘的33ms,并且基于軟件的視頻呈現(xiàn)過程可以前進(jìn)回到動(dòng)作708。
上述過程步驟可應(yīng)用于和/或可以適合于符合NTSC以外的其它標(biāo)準(zhǔn)的視頻。例如,對(duì)于逐行標(biāo)準(zhǔn),基于軟件的視頻呈現(xiàn)過程不使用VBI極性,因?yàn)檫@只與隔行內(nèi)容有關(guān)。
同樣,基于軟件的視頻呈現(xiàn)過程可應(yīng)用于具有其它周期持續(xù)時(shí)間的標(biāo)準(zhǔn)。在某些這樣的實(shí)現(xiàn)中,基于軟件的視頻呈現(xiàn)過程可以進(jìn)行相反的電視電影。例如,這意味著該過程通過呈現(xiàn)視頻幀,好象幀速率是30fps一樣,可以有效地達(dá)到每秒24幀(fps)的速率?;谲浖囊曨l呈現(xiàn)過程隨后可以設(shè)置每個(gè)第四幀翻轉(zhuǎn)時(shí)間間隔為4而不是標(biāo)準(zhǔn)的2,這意味著每個(gè)第四幀將顯示前三幀的兩倍長(zhǎng)。這些只是應(yīng)用于上述基于軟件的視頻呈現(xiàn)過程的一些可能的示例。
示例性音頻和視頻提供時(shí)間調(diào)度在某些實(shí)現(xiàn)中,基于軟件的音頻呈現(xiàn)過程和基于軟件的視頻呈現(xiàn)過程可以在同步過程中彼此通信,以在回放時(shí)減少延遲,同時(shí)最小化丟棄初始幀的發(fā)生。而且,同步過程可以動(dòng)態(tài)地自適應(yīng)到基于軟件的音頻呈現(xiàn)過程和基于軟件的視頻呈現(xiàn)過程遇到的各種音頻和視頻格式以及相關(guān)聯(lián)的壓縮與解壓技術(shù)。這樣的音視頻同步的示例下面在接收到播放命令時(shí)啟動(dòng)和響應(yīng)于暫停命令時(shí)暫停的上下文中描述。
圖8表示一般在800的一個(gè)這樣的音視頻同步啟動(dòng)過程,其中時(shí)間從頁上部到頁下部前進(jìn)。音頻解碼器802、音頻呈現(xiàn)器804、視頻呈現(xiàn)器806和視頻解碼器808在810接收到運(yùn)行命令。假設(shè)運(yùn)行命令是播放電影。在812,來自電影的第一個(gè)音頻樣本從音頻解碼器802傳送到音頻呈現(xiàn)器804。音頻呈現(xiàn)器確定可以呈現(xiàn)該音頻樣本的最早的可能時(shí)間。在814,音頻呈現(xiàn)器804向視頻呈現(xiàn)器806通知該音頻樣本的最早可能的音頻呈現(xiàn)時(shí)間。在某些實(shí)現(xiàn)中,通信信道和/或相關(guān)聯(lián)的通信協(xié)議可以預(yù)先建立,以促進(jìn)啟動(dòng)過程而減少延遲。
在816,視頻解碼器808將電影的第一視頻幀傳送給視頻呈現(xiàn)器806。視頻呈現(xiàn)器查明第一視頻幀的最早可能的視頻呈現(xiàn)時(shí)間。在818,視頻呈現(xiàn)器806向音頻呈現(xiàn)器804通知該幀的最早視頻呈現(xiàn)時(shí)間。音頻呈現(xiàn)器804和視頻呈現(xiàn)器806被配置成在可能的音頻呈現(xiàn)時(shí)間與可能的視頻呈現(xiàn)時(shí)間中的較后者呈現(xiàn)。因此在對(duì)應(yīng)于較后的可能呈現(xiàn)時(shí)間的時(shí)間820,音頻呈現(xiàn)器在822開始音頻呈現(xiàn),而視頻呈現(xiàn)器開始視頻呈現(xiàn)824。在這個(gè)特定的示例中,音頻和視頻呈現(xiàn)器作出有關(guān)最早呈現(xiàn)時(shí)間的決定。諸如解碼器等其它組件可替換地或另外涉及決策制定過程。
在另一個(gè)實(shí)現(xiàn)中,為促進(jìn)同步過程,一旦音頻呈現(xiàn)器804已經(jīng)接收到一個(gè)樣本并且確定最早可能的呈現(xiàn)時(shí)間,則音頻呈現(xiàn)器就可查詢視頻呈現(xiàn)器806,以確定視頻呈現(xiàn)器是否已經(jīng)接收到相應(yīng)的視頻幀。在肯定條件下,音頻呈現(xiàn)器804可向視頻呈現(xiàn)器806查詢有關(guān)視頻呈現(xiàn)的最早可能的呈現(xiàn)時(shí)間。同樣,視頻呈現(xiàn)器可查詢音頻呈現(xiàn)器。
圖9表示一般在900的另一個(gè)視頻同步過程,其中時(shí)間從頁上部至頁下部前進(jìn)。在這個(gè)實(shí)例中,同步過程涉及用戶暫停命令。音頻解碼器902、音頻呈現(xiàn)器904、視頻解碼器906和視頻呈現(xiàn)器908在910接收到暫停命令。假設(shè)暫停命令是在播放電影的過程期間接收的,并且音頻呈現(xiàn)器904比視頻呈現(xiàn)器908較早地接收到暫停命令。當(dāng)音頻解碼器器902和視頻解碼器906接收暫停命令時(shí),它們還可將解碼的樣本分別傳送給音頻呈現(xiàn)器和視頻呈現(xiàn)器,直到用于傳送媒體樣本的緩沖器用完(動(dòng)作912,914)。
在動(dòng)作922,音頻呈現(xiàn)器暫停音頻硬件,使得音頻硬件不再消耗音頻樣本。在該點(diǎn)處,音頻呈現(xiàn)器完成它從運(yùn)行狀態(tài)到暫停狀態(tài)的轉(zhuǎn)移。然而,在音頻驅(qū)動(dòng)程序中有排隊(duì)的音頻樣本。DMA指針位置指示在音頻硬件恢復(fù)到運(yùn)行或播放狀態(tài)時(shí)將消耗的音頻樣本。在動(dòng)作924,視頻呈現(xiàn)器停止呈現(xiàn)視頻幀。在該點(diǎn)處,視頻呈現(xiàn)器完成從運(yùn)行狀態(tài)至?xí)和顟B(tài)的轉(zhuǎn)移。然而,在等待呈現(xiàn)的FIFO隊(duì)列中有一些解碼的視頻幀。
由于音頻呈現(xiàn)器和視頻呈現(xiàn)器在暫停狀態(tài)中不再消耗媒體樣本,所以將不釋放保存解碼的樣本的緩沖器。解碼器一旦用完緩沖器,那么它們也將進(jìn)入暫停狀態(tài)(動(dòng)作926和928)。在動(dòng)作930,當(dāng)用戶恢復(fù)播放媒體時(shí),運(yùn)行命令被發(fā)送到每個(gè)模塊,包括音頻解碼器902、音頻呈現(xiàn)器904、視頻解碼器906和視頻呈現(xiàn)器908。
響應(yīng)于動(dòng)作930,音頻呈現(xiàn)器904在932開始按照幀提供時(shí)間標(biāo)記(PTS)查詢有關(guān)視頻呈現(xiàn)器可以為視頻硬件產(chǎn)生下一視頻幀的精確時(shí)間。如先前討論的,視頻呈現(xiàn)器跟蹤由視頻硬件的顯示周期生成的VBI信號(hào),使得視頻呈現(xiàn)器可以確定相對(duì)于基準(zhǔn)時(shí)鐘的將顯示視頻幀的精確時(shí)間。該時(shí)間可以表示為以微秒為單位的tn=t0+n×33.34,其中t0從當(dāng)前基準(zhǔn)時(shí)鐘時(shí)間延長(zhǎng)到下一個(gè)VBI周期時(shí)間的結(jié)束時(shí)間,并且n是整數(shù)(細(xì)節(jié)見有關(guān)圖6的討論)。
同樣,在動(dòng)作934,音頻呈現(xiàn)器可以查詢暫停的音頻樣本PTS和具有與動(dòng)作932的第一視頻幀相同的PTS的音頻樣本。通過讀取在暫停音頻硬件之后的DMA指針位置,音頻呈現(xiàn)器可以告訴音頻硬件將呈現(xiàn)的下一個(gè)樣本的PTS。下一視頻幀PTS與下一音頻樣本PTS的差指示為Δt,它是音頻呈現(xiàn)在視頻呈現(xiàn)開始之前應(yīng)該開始的時(shí)間。
由于下一視頻幀只可以在tn開始,并且基于基準(zhǔn)時(shí)鐘的當(dāng)前時(shí)間是t,因此n是Δt/33.34加1的整數(shù)部分,并且音頻硬件應(yīng)該在tn-Δt恢復(fù)播放。換言之,調(diào)整音頻硬件恢復(fù)的時(shí)間,使得在動(dòng)作942價(jià)值Δt的音頻樣本在動(dòng)作944顯示下一視頻幀時(shí)已經(jīng)被消耗。因此,音頻硬件開始呈現(xiàn)具有非常接近視頻幀PTS的PTS的音頻樣本。在這個(gè)事件之后,音頻和視頻呈現(xiàn)器開始釋放媒體樣本緩沖器。一旦消耗了那些樣本,解碼器就可以將新的媒體樣本傳送到呈現(xiàn)器(動(dòng)作952和954)。這也適用于音頻呈現(xiàn)器比視頻呈現(xiàn)器晚Δt<0接收到暫停命令的情況,這意味著音頻硬件將比視頻呈現(xiàn)器晚|Δt|恢復(fù)。
結(jié)論上面描述了有關(guān)基于軟件的音頻和視頻呈現(xiàn)的各種概念。各種實(shí)現(xiàn)可以在大量配置中組合這些概念。例如,視頻時(shí)鐘從屬概念可以用于提供實(shí)時(shí)視頻呈現(xiàn),同時(shí)使視頻時(shí)鐘與諸如源等外部時(shí)鐘同步。音頻時(shí)鐘可使用插入和抽取概念與視頻時(shí)鐘同步。音頻和視頻啟動(dòng)同步可以促進(jìn)音頻呈現(xiàn)過程與視頻呈現(xiàn)過程之間的通信,以減少回放時(shí)的延遲,同時(shí)最小化丟棄初始幀的發(fā)生。
權(quán)利要求
1.一種包括計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),當(dāng)執(zhí)行所述計(jì)算機(jī)可執(zhí)行指令時(shí),執(zhí)行下列動(dòng)作測(cè)量外部時(shí)鐘與音頻時(shí)鐘之間的第一漂移速率,直到所述漂移達(dá)到一閾值;以及響應(yīng)于所述漂移達(dá)到所述閾值并且基于所述第一漂移速率,操縱所述音頻時(shí)鐘,使它達(dá)到第二漂移速率,所述第二漂移速率具有較小的值以及與所述第一漂移速率相反的極性。
2.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括查明源音頻采樣速率。
3.如權(quán)利要求2所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述測(cè)量包括確定所述外部時(shí)鐘與音頻硬件時(shí)鐘之間的速率差,以及將所述差添加到所述源音頻采樣速率。
4.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述閾值包括第一閾值,且還包括進(jìn)一步操縱所述音頻時(shí)鐘,使得所述音頻時(shí)鐘圍繞所測(cè)得的速率在具有比所述第一閾值小的大小的第二閾值的相反極性之間以所述第二漂移速率振蕩。
5.如權(quán)利要求4所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述進(jìn)一步操縱包括確定比所述第二漂移速率小的第三漂移速率,并且所述第三漂移速率足夠大,使得所述音頻時(shí)鐘在預(yù)定的時(shí)間段內(nèi)越過所測(cè)得的速率。
6.如權(quán)利要求5所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述預(yù)定的時(shí)間段等于15分鐘。
7.如權(quán)利要求5所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括計(jì)算逐漸變小的漂移速率,直到確定一最小值,在所述最小值內(nèi),所述音頻時(shí)鐘漂移將在所述預(yù)定的時(shí)間段內(nèi)圍繞所測(cè)得的速率在第二閾值的相反極性之間振蕩。
8.如權(quán)利要求4所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述第二閾值至少為所述音頻時(shí)鐘固有的抖動(dòng)量的二倍大,并且所述第二閾值還足夠小,使得所述音頻時(shí)鐘以所述第二漂移速率在小于一小時(shí)的時(shí)間內(nèi)在所述第二閾值的相反極性之間漂移。
9.如權(quán)利要求4所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述音頻時(shí)鐘以所述第二漂移速率從所述第二閾值的正極性漂移到所述第二閾值的負(fù)極性所用的時(shí)間大約與所述音頻時(shí)鐘從所述第二閾值的負(fù)極性漂移到所述第二閾值的正極性所用的時(shí)間相同。
10.一種包括計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),當(dāng)執(zhí)行所述可執(zhí)行指令時(shí),執(zhí)行下列動(dòng)作測(cè)量相對(duì)于外部時(shí)鐘速率的音頻時(shí)鐘速率;以及操縱所述音頻時(shí)鐘,使得所述音頻時(shí)鐘速率圍繞所測(cè)得的速率振蕩。
11.如權(quán)利要求10所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括選擇第一閾值,并且其中,當(dāng)所述音頻時(shí)鐘速率與所測(cè)得的速率之間的漂移等于所述第一閾值時(shí),調(diào)整所述音頻時(shí)鐘速率以達(dá)到相對(duì)于所測(cè)得的速率減少的漂移速率。
12.如權(quán)利要求11所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述調(diào)整包括在給定單位時(shí)間內(nèi)呈現(xiàn)至少一個(gè)音頻樣本兩次。
13.如權(quán)利要求11所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括選擇具有與所述第一閾值相反極性的第二閾值,以及當(dāng)所述漂移達(dá)到所述第二閾值時(shí),進(jìn)一步操縱所述音頻時(shí)鐘速率,使得所述音頻時(shí)鐘速率跨所測(cè)得的速率漂移回去。
14.如權(quán)利要求13所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述進(jìn)一步操縱包括抽取將被呈現(xiàn)的至少一個(gè)音頻樣本。
15.一種包括計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),當(dāng)執(zhí)行所述計(jì)算機(jī)可執(zhí)行指令時(shí),執(zhí)行下列動(dòng)作確定第一音頻樣本的可能音頻呈現(xiàn)時(shí)間;查明第一視頻幀的可能視頻呈現(xiàn)時(shí)間;以及在所述可能音頻呈現(xiàn)時(shí)間與所述可能視頻呈現(xiàn)時(shí)間中的較后者呈現(xiàn)所述第一音頻樣本和所述第一視頻幀。
16.如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述確定包括確定最早的可能音頻呈現(xiàn)時(shí)間,以及其中,所述查明可能視頻呈現(xiàn)時(shí)間包括查明最早的可能視頻呈現(xiàn)時(shí)間。
17.如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述確定是由基于軟件的音頻呈現(xiàn)引擎響應(yīng)于用戶命令在接收到第一音頻樣本后完成的。
18.如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述查明是由基于軟件的視頻呈現(xiàn)引擎響應(yīng)于用戶命令在接收到第一視頻幀后完成的。
19.如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述確定是由基于軟件的音頻呈現(xiàn)引擎完成的,所述基于軟件的音頻呈現(xiàn)引擎將所述可能音頻呈現(xiàn)時(shí)間傳送給基于軟件的視頻呈現(xiàn)引擎,并且其中,所述查明是由基于軟件的視頻呈現(xiàn)引擎完成的,所述基于軟件的視頻呈現(xiàn)引擎將所述可能視頻呈現(xiàn)時(shí)間傳送給基于軟件的音頻呈現(xiàn)引擎,并且其中,所述基于軟件的音頻呈現(xiàn)引擎與所述基于軟件的視頻呈現(xiàn)引擎按照所述時(shí)間中的較后者來調(diào)度各自的音頻和視頻呈現(xiàn)。
20.如權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,在收到第一音頻樣本后且在所述確定后,所述基于軟件的音頻呈現(xiàn)引擎向所述基于軟件的視頻呈現(xiàn)引擎查詢所述基于軟件的視頻呈現(xiàn)引擎是否已經(jīng)接收到第一相應(yīng)視頻幀,以及如果是,則查詢所述視頻幀的可能視頻呈現(xiàn)時(shí)間,并且其中,在接收到第一視頻幀后且在所述查明后,所述基于軟件的視頻呈現(xiàn)引擎向所述基于軟件的音頻呈現(xiàn)引擎查詢所述基于軟件的音頻呈現(xiàn)引擎是否已經(jīng)接收到第一相應(yīng)音頻樣本,以及如果是,則查詢所述音頻樣本的可能音頻呈現(xiàn)時(shí)間。
全文摘要
描述了基于軟件的音頻呈現(xiàn)。一個(gè)特定的實(shí)現(xiàn)包括計(jì)算機(jī)可讀介質(zhì),它被配置成測(cè)量外部時(shí)鐘與音頻時(shí)鐘之間的第一漂移速率,直到漂移達(dá)到一個(gè)閾值。響應(yīng)于該漂移達(dá)到閾值并且基于第一漂移速率,該實(shí)現(xiàn)操縱音頻時(shí)鐘,使它達(dá)到第二漂移速率,該第二漂移速率具有較小的值以及與第一漂移速率相反的極性。
文檔編號(hào)H04N7/54GK1812589SQ20061000251
公開日2006年8月2日 申請(qǐng)日期2006年1月5日 優(yōu)先權(quán)日2005年1月5日
發(fā)明者B·陳 申請(qǐng)人:微軟公司