欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于軟件的音頻呈現(xiàn)的制作方法

文檔序號:7951865閱讀:175來源:國知局
專利名稱:基于軟件的音頻呈現(xiàn)的制作方法
技術領域
本發(fā)明涉及媒體呈現(xiàn),尤其涉及基于軟件的音頻呈現(xiàn)。
背景技術
存在收聽和/或觀看媒體內(nèi)容的大量消費者需求。這樣的媒體內(nèi)容很容易從大量來源獲得。消費者在它們觀看和/或收聽這樣的媒體時希望有質量的體驗。此外,消費者看重能執(zhí)行多種功能并且還能提供有質量的用戶體驗的單個多功能消費者設備。
個人計算機(PC)提供一種多功能平臺來觀看和/或收聽媒體。PC獲得媒體,將它適當?shù)仄饰銎饰龀梢纛l數(shù)據(jù)和視頻數(shù)據(jù)。PC隨后解碼該媒體,并且諸如通過顯示設備和/或揚聲器呈現(xiàn)數(shù)據(jù)以向用戶演示。PC單獨或結合硬件組件使用基于軟件的組件來解碼和呈現(xiàn)媒體。PC平臺的基于軟件的配置是多功能的,因為它可適用于播放各種媒體格式。此外,隨著新格式的開發(fā),PC可被更新以處理新格式。這樣的更新經(jīng)??梢宰詣拥赝瓿?,很少需要或不需要用戶費神。諸如基于硬件的平臺等其它平臺的多功能性稍弱,因為它們是在制造時“配置”的,并且沒有或只有有限的這些能力。
PC的這種多功能性已經(jīng)讓大部分消費者接受。然而,為了利用它的多功能性,PC平臺已經(jīng)將優(yōu)先級給予了各種設計參數(shù)而不是其它方面。例如,在從直播來源獲得音頻樣本的情況下,在現(xiàn)有PC平臺上的音頻呈現(xiàn)可能沒有使音頻硬件呈現(xiàn)速率與音頻樣本捕捉速率協(xié)調的能力。然而,如果未經(jīng)檢查的話,在兩分鐘之間的任何差異隨著延長的播放時間的過去會變得顯著。
例如,在從諸如陸地、電纜或衛(wèi)星無線電或TV廣播系統(tǒng)等直播來源捕捉音頻樣本的情況下,源時鐘與音頻呈現(xiàn)硬件時鐘之間的漂移最后可能變得如此之大,以致于某些音頻樣本必須被丟棄或者必須在直播音頻流中插入靜音。這樣一種場景可以產(chǎn)生不太令人愉快的用戶體驗。此外,在PC平臺上,其中音頻呈現(xiàn)組件基于它自己的時鐘來呈現(xiàn),該時鐘常常與媒體源或視頻呈現(xiàn)組件不同步,會發(fā)生一種情況,其中音頻演示與相應的視頻演示的不同步到觀看者很容易注意到它的程度。這樣的情況通過諸如播放電影等長時間的播放,或在長時間觀看單個TV頻道時會加劇。
隨著技術的進步,消費者希望由當前PC的基于軟件的平臺結合提高的圖像和/或聲音質量提供的靈活性,來填充不斷擴大的消費者設備和場景的領域。

發(fā)明內(nèi)容
描述了基于軟件的音頻呈現(xiàn)。一個特定的實現(xiàn)包括計算機可讀介質,它被配置成測量外部時鐘與音頻時鐘之間的第一漂移速率,直到該漂移達到一個閾值。響應于漂移達到該閾值并且基于第一漂移速率,該實現(xiàn)操縱音頻時鐘,使它達到具有較小值以及與第一漂移速率相反的極性的第二漂移速率。
另一個實現(xiàn)確定第一音頻樣本的可能音頻呈現(xiàn)時間。該實現(xiàn)查明第一視頻幀的可能視頻呈現(xiàn)時間。該實現(xiàn)在可能音頻呈現(xiàn)時間與可能視頻呈現(xiàn)時間中的較后者呈現(xiàn)第一音頻樣本和第一視頻幀。


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