專利名稱:數(shù)據(jù)速率變換的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)速率變換,而且特別地、但不是唯一地,涉及視頻數(shù)據(jù)/幀場速率變速。
本發(fā)明可以很多方式予以實(shí)現(xiàn),現(xiàn)在對(duì)照附圖敘述其方式之一。
圖1表示Breshenham的畫線算法;圖2表示通過視頻解碼器的數(shù)據(jù)流的方框圖;和圖3至6是本發(fā)明各方面的流程圖。
有多種壓縮視頻信息的方法。特別是,有可執(zhí)行壓縮的三個(gè)標(biāo)準(zhǔn)JPEG,MPEG和H.261。這些標(biāo)準(zhǔn)在US5212742等文件中進(jìn)行了討論。
視頻信息通常被格式化為一系列的場。欲被變換為以視頻格式顯示的原始信息不能直接與該信息將被顯示的場速率兼容。例如,電影膠片以24幀/秒速率(24Hz)拍攝,而例如NTSC電視制式場速率為大約60 Hz。增加電影圖象的幀速率以與電視系統(tǒng)電影速率相一致的技術(shù)稱為下拉(pulldown)變換。
繼續(xù)以上述例子敘述如何以NTSC標(biāo)準(zhǔn)格式顯示電影??墒褂谩?/3下拉”變換,其中每個(gè)電影的幀以視頻重復(fù)率重復(fù)二個(gè)或三個(gè)連續(xù)場周期。重復(fù)次數(shù)交變,以致第一幀在二個(gè)連續(xù)場周期中顯示兩次,第二幀在三個(gè)連續(xù)場周期中顯示三次,以此類推。因此,一秒中在以24 Hz為速率的十二個(gè)電影幀每幀已被產(chǎn)生兩次(即,對(duì)于24場周期),而另外十二個(gè)電影幀已被產(chǎn)生三次(即對(duì)于36場周期)??偣?24+36)等于在60Hz場速率下的一秒內(nèi)的60場。
下拉命令可在遠(yuǎn)程產(chǎn)生并且發(fā)信號(hào)給與顯示設(shè)備相關(guān)的視頻解碼器,或者在視頻解碼器本地產(chǎn)生。在發(fā)信號(hào)的下拉中,編碼器例如使用在MPEG-2視頻語法中的“重復(fù)第一場”標(biāo)記執(zhí)行下拉計(jì)算和特別是那些幀被重復(fù)的信號(hào)。解碼器只是遵照所接收的遠(yuǎn)端產(chǎn)生的命令。
在本地下拉中,編碼器編碼該電影信息并將它發(fā)送到接收設(shè)備。在傳輸信號(hào)中沒有信息告訴接收設(shè)備的解碼器如何執(zhí)行合適的下拉變換(例如上面所提的“2/3下拉”)。因此,解碼器必須計(jì)算如何執(zhí)行從發(fā)送來的電影速率到顯示的場速率的合適變換。
如果只要求從24Hz幀速率下拉變換為60Hz場速率,單個(gè)2/3下拉變換是相對(duì)容易實(shí)現(xiàn)的。但是,實(shí)際上還要求其它的下拉方案。例如,對(duì)于PAL電視格式,24Hz電影幀速率可能需要被變換為50Hz場速率。
另外NTSC電視制片中額外的復(fù)雜性是實(shí)際的場速率不是60Hz,而是60000/1001Hz。因此,正規(guī)的交替2/3下拉產(chǎn)生實(shí)際上太高的場速率。
根據(jù)本發(fā)明,提供將以較低速率接收的數(shù)據(jù)幀變換為以較快速率產(chǎn)生數(shù)據(jù)的場的方法,該方法包括確定在幀周期中場重復(fù)的基本整數(shù)值;根據(jù)較快速率對(duì)較慢速率的比率及在該幀周期中場的基本重復(fù)次數(shù)對(duì)較慢幀速率的比率之間的差計(jì)算場重復(fù)率的差;當(dāng)重復(fù)場速率的差別基本上與計(jì)算的場重復(fù)率的差別不同時(shí),附加地重復(fù)或刪除重復(fù)場中所選部分以保持以較快速率重復(fù)這些場。
使用術(shù)語“幀”和“場”是為了方便。二者是指作為一組發(fā)送、接收和/或構(gòu)造的數(shù)據(jù)的任何幀、場、數(shù)據(jù)組或其它分離的量的一個(gè)集合。本發(fā)明允許所選的重復(fù)率通過包含或提取重復(fù)幀進(jìn)行改變,因此允許冗余數(shù)據(jù)實(shí)現(xiàn)較快場數(shù)據(jù)率。最好是,所選的基本整數(shù)重復(fù)率小于較快的場速率。在這種情況下,本方法將以重復(fù)速率另外加上重復(fù)幀。重復(fù)率可小于場速率的一半。
本方法不必選擇較低的基本整的重復(fù)率。在替代方案中,它可同樣好地選擇較快的速率,然后本方法可安排在需要時(shí)刪除重復(fù)的幀。
本發(fā)明還延伸到用于將接收的較慢速率數(shù)據(jù)幀變換為在較快速率產(chǎn)生的數(shù)據(jù)場的設(shè)備,該設(shè)備包括在一個(gè)幀周期中確定場重復(fù)的基本整數(shù)值的裝置;從較快對(duì)較慢速率的比率和在該幀周期中場的基本重復(fù)數(shù)對(duì)較低幀速率的比率之間的差計(jì)算場重復(fù)率的差的裝置;當(dāng)重復(fù)場的速率基本上與計(jì)算的速重復(fù)率的差不同時(shí),附加地重復(fù)或刪除所選的重復(fù)場以保持以較快速率重復(fù)這些場。
最好地,本設(shè)備包括產(chǎn)生一個(gè)重復(fù)或刪除幀信號(hào)的裝置,用于啟動(dòng)重復(fù)或刪除重復(fù)幀中所選的部分的裝置。
本發(fā)明提供一個(gè)一般化的解決方案給下拉計(jì)算,允許在50Hz場速率顯示23.98Hz、24Hz及25Hz幀速率的數(shù)據(jù)和以59.94Hz場速率顯示23.9 8Hz、24Hz、25Hz及29.97Hz速率的數(shù)據(jù)。
Breshenham的畫線算法是在顯示設(shè)備上給出任意斜率線的方法,它們被分為一系列的矩形象素(Pel)。由Addison-Wesley公司出版的Foley等人的書藉“交互式計(jì)算機(jī)繪圖基礎(chǔ)”第433與436頁之間可找到Breshenham的算法的敘述。
在圖1所示的畫線情況(這些線具有0和1之間的敘率),通過對(duì)在X軸的每個(gè)坐標(biāo)判定在Y軸的哪個(gè)象素最接近理想線,該算法來逼近該線。這個(gè)象素被照亮或上色以作為適于應(yīng)用的部分。
當(dāng)該算法在該圖中從左到右例如從(n-1)移到(n)時(shí),它判定是否為(n-1)選擇相同Y坐標(biāo)的象素,或者是否遞增Y坐標(biāo)。在圖中,Y坐標(biāo)在(n)和(n+1)被遞增,但在(n+1)不遞增。
應(yīng)用到本發(fā)明中,在當(dāng)從視頻解碼器的輸入幀速率得出較快場速率時(shí)判定是否顯示當(dāng)前幀3個(gè)場周期面而不是正常的2個(gè)場周期中,使用是否遞增Y坐標(biāo)的判定。
在從24 Hz幀速率變換到60Hz場速率的簡單情況下,希望的加快速率是60/24。但是,重要的判定是確定在一幀周期中是否一幀顯示三個(gè)場周期(而不是兩個(gè)場周期)。如果沒有三場周期幀,則24 Hz幀速率將得到48場。因此,兩倍的重復(fù)場數(shù)的比率可從加快速率中減去6024-4824=1224=12........1]]>畫一條具有1/2斜率的線則可允許我們計(jì)算下拉圖。很清楚,對(duì)于1/2斜率的線,對(duì)于X坐標(biāo)的每一步Y(jié)坐標(biāo)遞增一次。這是期望的結(jié)果,因?yàn)槲覀冎牢覀冿@示交替的電影幀三個(gè)場次,以便執(zhí)行2/3下拉。
我們于1994年7月29日提交的、專利申請(qǐng)?zhí)枮?415413.5、名稱為“視頻解壓縮的方法和設(shè)備”敘述一種多標(biāo)準(zhǔn)視頻解碼器,它將被引用在這里供參考。本發(fā)明可針對(duì)于接收MPEG-2標(biāo)準(zhǔn)的該解碼器來實(shí)現(xiàn)。
參見圖2,在上述專利申請(qǐng)中敘述的解碼器的優(yōu)選實(shí)施例中,編碼器的MPEG數(shù)據(jù)(MPEG-1或MPEG-2)經(jīng)過一編碼數(shù)據(jù)輸入電路200轉(zhuǎn)送到該設(shè)備。然后這個(gè)數(shù)據(jù)經(jīng)過信號(hào)202傳送到起始碼檢測器(SCD)204。SCD 204識(shí)別許多起始碼,這些起始碼是獨(dú)特的比特模式,這些用可容易地由其后電路識(shí)別的相應(yīng)令牌代替。其余的數(shù)據(jù)(除起始碼之外)由數(shù)據(jù)令牌傳送。這個(gè)“起始碼”流和數(shù)據(jù)令牌經(jīng)過信號(hào)206傳送到格式電路208,格式電路208將該數(shù)據(jù)安排為合適的格式以便存儲(chǔ)在外部存儲(chǔ)器中。這個(gè)數(shù)據(jù)經(jīng)過信號(hào)210傳送到同步動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器中(SDRAM)接口電路212。
SDRAM接口電路212處理很多數(shù)據(jù)流,這些數(shù)據(jù)流在接口信號(hào)230的單個(gè)集上是多路傳輸?shù)?,以便它們可寫入外部SDRAM設(shè)備(或多個(gè)設(shè)備)或從該設(shè)備228讀出。在每個(gè)情況下,數(shù)據(jù)暫時(shí)存儲(chǔ)在擺動(dòng)(swing)緩沖器(214、216、218、220、222和224)中,每個(gè)擺動(dòng)緩沖器包括兩個(gè)分離的RAM陣列。SDRAM的地址由地址發(fā)生器330產(chǎn)生并且經(jīng)過信號(hào)332傳送到SDRAM接口電路212,在經(jīng)過SDRAM接口230加到外部SDRAM 228之前,這些地址進(jìn)一步由DRAM接口控制器226處理。地址是這樣產(chǎn)生的,使得編碼的數(shù)據(jù)緩沖器234和許多幀存儲(chǔ)器232仍然在外部SDRAM中。
前面提到的“起始碼”令牌及數(shù)據(jù)令牌的格式碼流經(jīng)過信號(hào)210傳送到SDRAM接口電路212,該信號(hào)暫時(shí)存儲(chǔ)在擺動(dòng)緩沖器214中。這個(gè)數(shù)據(jù)被寫入包括編碼的數(shù)據(jù)緩沖器(CDB)234的外部SDRAM 228的區(qū)域中。這個(gè)緩沖器具有FIFO(先進(jìn)先出)功能,在其中該數(shù)據(jù)的順序被保持。以經(jīng)過信號(hào)236離開該SDRAM接口電路之前,從CDB234返回的數(shù)據(jù)暫時(shí)存儲(chǔ)在擺動(dòng)緩沖器216中。信號(hào)236中的數(shù)據(jù)是與信號(hào)210中的數(shù)據(jù)相同的,除了它在CDB234中已延遲了一個(gè)(可變的)時(shí)間之外。
從CDB返回的數(shù)據(jù)在電路238中是未格式化的,適用于存在外部SDRAM中,在此之前由格式化器208完成。但是應(yīng)該提出沒有限制信號(hào)206的總線寬度與信號(hào)240相同。在優(yōu)選的實(shí)施例中,更寬的總線寬度由信號(hào)240使用,以便在這點(diǎn)可由信號(hào)206支持較高瞬間數(shù)據(jù)帶寬。
該數(shù)據(jù)(仍然包括“起始碼”令牌,而該數(shù)據(jù)的剩余部分作為數(shù)據(jù)令牌傳送)經(jīng)過信號(hào)240傳送到視頻分析程序電路242。這個(gè)電路整個(gè)地說具有進(jìn)一步處理編碼的視頻數(shù)據(jù)的任務(wù)。具體說是視頻數(shù)據(jù)的結(jié)構(gòu)被“語法分析”,以便識(shí)別其分量部分。視頻分析程序包括微編程的狀態(tài)機(jī)(MSM)244,它有一個(gè)已存儲(chǔ)的程序。命令經(jīng)過信號(hào)250傳送到哈夫曼(Huffman)解碼器246。命令的一些部分由哈夫曼解碼器246翻譯。該命令的剩余部分與由哈夫曼解碼器產(chǎn)生的數(shù)據(jù)一起經(jīng)過信號(hào)255傳送到算術(shù)與邏輯單元(ALU)248。在這里該命令的一些部分再次由ALU本身翻譯,而同時(shí)該命令的剩余部分和由該ALU產(chǎn)生的數(shù)據(jù)經(jīng)過信號(hào)256傳送到令牌格式器258。哈夫曼解碼器246可將差錯(cuò)情況經(jīng)過信號(hào)252通知MSM244。ALU248經(jīng)過信號(hào)254反饋狀況碼給MSM244。這使MSM能夠執(zhí)行“轉(zhuǎn)移”(JUMP)命令,這是以在ALU248中被處理的數(shù)據(jù)為條件的。ALU內(nèi)包括一個(gè)寄存器文件,以便也可存儲(chǔ)所選的信息?!捌鹗即a”令牌有效地通知后續(xù)的數(shù)據(jù)的類型(包括在該數(shù)據(jù)令牌中)。這允許MSM判定后續(xù)哪個(gè)命令序列來解碼該數(shù)據(jù)。除了根據(jù)從起始碼得到的令牌的這個(gè)粗略判定外,視頻數(shù)據(jù)的精細(xì)結(jié)構(gòu)緊接著前面敘述的存儲(chǔ)那個(gè)信息的機(jī)制,這個(gè)信息規(guī)定了ALU內(nèi)寄存器文件中視頻數(shù)據(jù)的結(jié)構(gòu),并且根據(jù)解碼的數(shù)據(jù)值使用它執(zhí)行條件“轉(zhuǎn)移”命令以便選擇交替命令序列來解碼編碼的數(shù)據(jù)中的精確的符號(hào)序列。
解碼的數(shù)據(jù)與剩余的命令比特(哈夫曼解碼器不使用的比特)經(jīng)過信號(hào)256傳送到令牌格式器258。響應(yīng)該指令比特,該數(shù)據(jù)被格式化為令牌,這些令牌可由其后的處理級(jí)識(shí)別。得到的令牌經(jīng)過信號(hào)260、262和264傳送到三個(gè)分開的目的地。一個(gè)令牌流262傳送到地址發(fā)生器330,在其中它被翻譯以產(chǎn)生合適的地址保持編碼的數(shù)據(jù)緩沖器和幀存儲(chǔ)器,如前面所述的。第二令牌流264由視頻定時(shí)產(chǎn)生電路326翻譯,以便控制編碼視頻信息的最后顯示的一些部分。第三令牌流260傳送到反向模型器266,而且繼續(xù)被傳送到其后的處理電路。應(yīng)該明白,雖然三個(gè)令牌流(260、262和264)彼此是相同的,但是所提取的信息彼此是不同的。與具體電路的功能無關(guān)的那些令牌被丟棄。在令牌流262和264情況中對(duì)翻譯極有用的令牌基本上是控制信息,雖然連接到令牌流260的電路中對(duì)翻譯極有用的令牌流可更有用地被看成數(shù)據(jù)。
反向模型器266具有擴(kuò)展在該數(shù)據(jù)中出現(xiàn)的零系數(shù)的任務(wù),以便使得數(shù)據(jù)包括精確地具有64系數(shù)的數(shù)據(jù)塊,這是經(jīng)過信號(hào)268傳送到反向鋸齒形電路270。這個(gè)電路按照兩個(gè)預(yù)定碼型之一重新排序數(shù)據(jù)流,并且得到可認(rèn)為是二維的數(shù)據(jù)。該反向鋸齒形電路包括一個(gè)小的隨機(jī)訪問存儲(chǔ)器(RAM)272,數(shù)據(jù)在進(jìn)行重新排序時(shí)暫存其中。如此產(chǎn)生的數(shù)據(jù)經(jīng)過信號(hào)274傳送到反向量化器276。在這里系數(shù)是非量化的并返回為它們合適的數(shù)值為反向離散余弦(DCT)函數(shù)作準(zhǔn)備。反向DCT是一個(gè)可分離變換,所以它必須應(yīng)用兩次,垂直方向一次和水平方向一次。在這個(gè)實(shí)施例中,單個(gè)的一維反向DCT函數(shù)使用兩次來執(zhí)行安全的二維變換。該數(shù)據(jù)首先經(jīng)過信號(hào)278進(jìn)入反向DCT電路280。所得數(shù)據(jù)經(jīng)過信號(hào)284傳送并存儲(chǔ)在一個(gè)轉(zhuǎn)置RAM282。該數(shù)據(jù)從該轉(zhuǎn)置RAM讀出,但是以與它被寫入不同的順序,以便該數(shù)據(jù)被轉(zhuǎn)置(即,行和列交換)。這個(gè)轉(zhuǎn)置的數(shù)據(jù)經(jīng)過信號(hào)286傳送到反向DCT280,在這里它進(jìn)行第二次處理,從這第二變換得到的數(shù)據(jù)經(jīng)過信號(hào)288傳送到場/幀電路290。
該場/幀電路在一些情況下再次重新排序數(shù)據(jù),諸如經(jīng)過信號(hào)294傳送的數(shù)據(jù)是以與從外部SDRAM的幀存儲(chǔ)中作為預(yù)期數(shù)據(jù)讀出的方式相同的編排方式(場或幀)。場/幀電路290在RAM292中暫時(shí)地存儲(chǔ)數(shù)據(jù)用于該重新排序的目的。
在外部SDRAM中,如前所述,預(yù)期數(shù)據(jù)從保存它們的幀存儲(chǔ)器中被讀出。預(yù)期數(shù)據(jù)經(jīng)過兩條通路(一條通路通常用于“前向預(yù)期”和另一條通路通常用于“后向預(yù)期”,雖然這不是嚴(yán)格遵守的)被讀出。一條通路包括擺動(dòng)緩沖器222和信號(hào)296,而另一條通路包括擺動(dòng)緩沖器224和信號(hào)298。該數(shù)據(jù)由預(yù)期濾波器300濾波,如果由指示給那個(gè)數(shù)據(jù)的特定預(yù)期模式提出要求,兩個(gè)預(yù)期數(shù)據(jù)(“前向”和“后向”)可被平均。結(jié)果產(chǎn)生的預(yù)期數(shù)據(jù)經(jīng)過信號(hào)302傳送到一個(gè)預(yù)期加法器304,這里它被加到從場/幀電路經(jīng)過信號(hào)294傳送來的數(shù)據(jù)。如此產(chǎn)生的解碼圖象信息經(jīng)過信號(hào)306和擺動(dòng)緩沖器220寫回到第三幀存儲(chǔ)器。
為了產(chǎn)生視頻信號(hào),解碼的信息經(jīng)過擺動(dòng)緩沖器218從SDRAM中讀出,然后經(jīng)過兩信號(hào)通路之一傳送。色度數(shù)據(jù)經(jīng)過信號(hào)308傳送到垂直過取樣器(upsampler)312,該垂直過取樣器對(duì)該數(shù)據(jù)過取樣,使得具有與亮度信號(hào)使用的掃描行數(shù)相同數(shù)目的掃描行。垂直過取樣器312在行存儲(chǔ)器314中存儲(chǔ)兩個(gè)色度信號(hào)的每個(gè)色度信號(hào)的一個(gè)掃描行。得到的兩個(gè)色信號(hào)(藍(lán)色差信號(hào)和紅色差信號(hào))經(jīng)信號(hào)316和318傳送到水平過取樣器320。亮度信號(hào)(它不要求垂直過取樣)也經(jīng)過信號(hào)310傳送到水平過取樣器。水平過取樣器320有這樣的任務(wù)按預(yù)置的比例因數(shù)之一來重取樣以為最終掃描行產(chǎn)生一適當(dāng)?shù)南笏財(cái)?shù)量。該比例系數(shù)是經(jīng)過由視頻定時(shí)發(fā)生(VTG)電路326提供的信號(hào)324選擇的。這個(gè)信息簡單地由從經(jīng)過信號(hào)264加到VTG的令牌之一被提取出來。
由水平過取樣器產(chǎn)生的數(shù)據(jù)經(jīng)過信號(hào)322傳送到輸出多路復(fù)用器327。響應(yīng)由視頻定時(shí)發(fā)生器(VTG)電路326產(chǎn)生的定時(shí)信號(hào)328,該多路復(fù)用器多路復(fù)用由輸出多路復(fù)用器內(nèi)部產(chǎn)生的包含有同步消隱和邊界信息的實(shí)際的視頻數(shù)據(jù)信號(hào),該實(shí)際視頻數(shù)據(jù)信號(hào)是經(jīng)過信號(hào)322傳來的。為了產(chǎn)生正確的定時(shí)信號(hào),特別是在產(chǎn)生正確的邊界信息數(shù)量方面,VTG使用經(jīng)過信號(hào)264的以令牌傳送的信息。
最后得到的視頻信號(hào)與許多選通脈沖、同步和消隱信號(hào)一起經(jīng)過信號(hào)334傳送到視頻輸出接口336。然后該視頻信號(hào)可傳送到一些合適的視頻顯示設(shè)備。
很多其它的接口被提供。微處理器接口340使一個(gè)外部的微處理器能夠被連接到信號(hào)338。信號(hào)342接到許多電路塊,允許視頻解碼裝置的當(dāng)前狀態(tài)被該外部微處理器讀出。另外,一些特性可由該外部微處理器控制,經(jīng)過這個(gè)接口寫入多個(gè)控制寄存器。
JTAG(聯(lián)合測試操作組)接口346允許該設(shè)備的各方面經(jīng)過接至信號(hào)344的外部設(shè)備進(jìn)行控制。JTAG接口346經(jīng)常只有用于印刷電路板測試(組裝之后),在測試中只需控制視頻解碼裝置的外部信號(hào)。在這個(gè)實(shí)施例中提供了附加的測試能力,而且由于這個(gè)原因,JTAG接口346經(jīng)過信號(hào)348接到所有的電路塊。
電路352用于根據(jù)外部時(shí)鐘信號(hào)350產(chǎn)生和分配時(shí)鐘信號(hào)354。這包括各種鎖相環(huán)(PLL),使能夠從外部較低速時(shí)鐘產(chǎn)生較高速內(nèi)部時(shí)鐘。
關(guān)于在上述專利申請(qǐng)中敘述的視頻解碼器,其顯示速率是已知的,因?yàn)榕渲霉苣_(NTSC/PAL)指示是否在產(chǎn)生59.94 Hz或50 Hz的顯示速率。該電影幀速率作為幀速率參數(shù)以MPEG-2視頻信息流進(jìn)行傳輸。
在事件的正常過程中,任何進(jìn)程的幀都以兩個(gè)場的時(shí)間顯示。圖象型的令牌中的一比特控制第一場的重復(fù)使該幀顯示三場的時(shí)間。 表1表中d雙倍高度(即重復(fù)幀為兩場)x上部場優(yōu)先(在場圖象中未定義)(top_field_first)
f重復(fù)第一場(repeat_first_field)p進(jìn)程的幀ss圖象結(jié)構(gòu)00上部場01下部場10幀11(未用)tt圖象類型00I圖象01P圖象10B圖象11D圖象“f”比特被置1以便重復(fù)第一場。在序列重疊的情況下,這個(gè)令牌中的“f”比特直接與在MPEG-2序列中的“重復(fù)第一場”比特一致。(這是信號(hào)下拉的情況)。但是,在“進(jìn)程序列”的情況下(該術(shù)語在MPEG標(biāo)準(zhǔn)中定義)是“1”,指示該序列被編碼為進(jìn)程序列,本地下拉被允許而且根據(jù)這里敘述的算法計(jì)算“f”比特。
該算法在可微編程的狀態(tài)機(jī)(MSM)上執(zhí)行,因此,以微碼(而不是以這里所附的說明該算法的更熟悉的“C”程序)表示。MSM是16比特機(jī)器,而且這造成一些小的復(fù)雜性,因?yàn)橐?6比特表示的數(shù)量范圍受到限制。
這是通過公共因數(shù)減少斜率的分母和分子的大小處理的。在本文件結(jié)尾給出的示例程序中,這是這樣進(jìn)行的,刪除任何公因數(shù)1001,然后除以2直至分子或分母為奇數(shù)為止。甚至這個(gè)簡單情況得出數(shù)據(jù)dx和dy,也是不超過16比特?cái)?shù)值范圍,如以在結(jié)果中所示的“min”和“max”指示的那樣。在所述視頻解碼器中,數(shù)值dx和dy預(yù)先計(jì)算并且存儲(chǔ)在表中,這些表被作為索引以確定正確的dx和dy值。結(jié)果,比率可用下面所示的最小可能的分子和分母進(jìn)一步減小表2
變量“d”是一個(gè)判定變量,它在每個(gè)X坐標(biāo)(或每個(gè)電影幀)被更新。在每個(gè)X坐標(biāo),Y的理想值(圖1中以直線表示)位于兩象素(一個(gè)黑和一個(gè)白)之間。d正比于上象素的距離與下象素的距離之間的差。
如果D是負(fù)的,則理想直線更接近較低的象素。
如果D是正的,則該理想直線更接近較高的象素。
在每個(gè)X坐標(biāo),該算法必須選擇較低的或較高的象素,然后更新d值,為下個(gè)X坐標(biāo)(下一幀)做好準(zhǔn)備。
如果D是負(fù)的,則選擇較低的象素。d通過在incr1上增加進(jìn)行更新。由于incr1是正的,d將增大,反映出這時(shí)直線在數(shù)值上離較低象素(在下一個(gè)X坐標(biāo))距離變遠(yuǎn)。
如果D是正的,則選擇較高象素。d通過在incr2上增加進(jìn)行更新。由于incr2是負(fù)的,d變小,反映出這時(shí)的直線離較高的象素(在下一個(gè)X坐標(biāo))距離變遠(yuǎn)。
因此incr1和incr2代表該算法可進(jìn)行的二個(gè)可能判定的d的變化(即,從理想象征線到較高象素的距離與從該線到較低象素的距離之間的差的變化)。因此,選擇了一幀周期中場重復(fù)的基本整數(shù)值之后,象征線的象征斜率根據(jù)方程1確定,該算法用于判定是否在一幀周期中加上一場重復(fù)以便以較快的場速率保持場重復(fù)的運(yùn)行平均速率。
在表2的例子中,一幀周期中場重復(fù)的基本整數(shù)值方便地選為2。因?yàn)楦鶕?jù)下拉圖這個(gè)場重復(fù)必須被加上以保持運(yùn)行平均速率。但是,也可以選擇在整體上超過場重復(fù)得到的基本整數(shù)值,這時(shí)可根據(jù)所建立的下拉圖刪除所選的場重復(fù)。
還應(yīng)該注意到,作為在該表中存儲(chǔ)dx與dy和計(jì)算incr1和incr2替代方案,在該表中直接地存儲(chǔ)預(yù)先計(jì)算的incr1與incr2同樣是有效的。
圖3表示以適當(dāng)次數(shù)解碼和顯示一場的過程。
圖4表示一個(gè)示例的算法,用來從場速率和幀速率確定dx和dy。在這個(gè)例子中,大于1000的場速率和幀速率的值被翻譯為代表1001的倍數(shù),例如24000的幀速率實(shí)際上代表24000/1001 Hz的幀速率。
圖5表示初始化incr1、incr2和d的算法。該算法在第一幀之前使用。dx和dy的值是整數(shù),因此分?jǐn)?shù)dy/dx代表“直線的斜率”。
圖6表示確定顯示一幀兩場或三場的一個(gè)算法。該算法每幀使用一次。incr1和incr2的值是由該初始化算法確定的。d的值是由這個(gè)算法對(duì)前面的幀產(chǎn)生的值,或者初始值是在第一幀的情況下的一個(gè)時(shí)間算法。
這個(gè)方法的主要優(yōu)點(diǎn)是1、所有要求的下拉變換使用相同算法進(jìn)行的。
2、一旦參數(shù)dx和dy已知(而且這些參數(shù)可存儲(chǔ)在該表中),則不需要乘法或除法。
3、該算法工作于任意長度幀序列-數(shù)值的增加不是無限的(不考慮字寬,這將最終導(dǎo)致數(shù)值表示方面的問題)。
4、具有重復(fù)場的幀均勻地分布在整個(gè)序列中。
5、為了該算法工作,只需要保持很小的狀態(tài)。僅僅是當(dāng)前的“d”值并可能有INCR1和INCR2(雖然這些值可重新計(jì)算或在每幀周期在表中查找)。
下面過程是Breshenham的線提取算法。
<pre listing-type="program-listing"><![CDATA[void breshenham(x1,y1,x2,y2){in dx,dy,incr1,incr2,d,x,y,xend;dx=abs(x2-x1);dy=abs(y2-y1);d=2*(dy-b);incr1=2*dy;incr2=d;if(x1>x2){x=x2;y=y(tǒng)2;xend=x1;}else{x=x1;y=y(tǒng)1xend=x2;}printf(″(%d,%d)\n″,x,y);while(x<xend){x++;if(d<0)d+=incr1;else{y++;d+=incr2;}printf(″(%d,%d)\n″,x,y); } }]]></pre>下面的程序表示修改的算法(作為函數(shù)threl_fieldsc())以便計(jì)算哪些幀顯示三場的時(shí)間。通過檢驗(yàn)一百萬電影幀來檢查每個(gè)可能的變換以保證場速率確定達(dá)到所要求的值。
<pre listing-type="program-listing"><![CDATA[#include#include<pddtypes.h>#include#includeBooleanthree_fields(int dx,int dy,int*d,Boolean initalise){int incr1,incr2,x,y,xend;int r=False;incr1=2*dy;incr2=2*(dy-dx);if(initalise){*d=incr2;}else{if(*d<0)*d+=incr1;else{ r=True;*d+=incr2;}}return r, }doiuble check_ratio(int dx,int dy,int limits[2]){int d;int frame,field=0,num_frames=10000000;double ratio,field_rate;int three=0,two=0;(void)three_fields(dx,dy,&amp;d,True);limits
=limits[1]=0;if(d<limits
)limits
=d;if(d>limits[1])limits[1]=d;for(frame=0;frame<num_frames;frame++){ if(three_fields(dx,dy,&amp;d,F(xiàn)alse)) {field+=3;three++;}else{ field+=2; two++;}if(d<limits
)limits
=d;if(d>limits[1])limits[1]=d; } ratio=((double)field)/((double)frame); return ratio;}static int frame_rates[]=/*input frame rates*/{-1,24000,/*numbers>1000 express a numerator-denominator=1001*/24,25,30000,30,50,60000,60,-1,-1,-1,-1,-1,-1-1};static int field_rates[]=/*output display rates*/{50,60000};double real_rate(int rate){if(rate>1000) return((double)rate)/1001.0;else return((double)rate); } void main(int argc,char **argv) {int dx,dy,field_index,frame_index;int limits[2];double ratio,field_rate;fbr(field_index=0;field_index<2;field_index++){ for(frame_index=1;frame_rates[frame_index]>0;frame_index++){ if((real_rate(frame_rates[frame_index])*2.0)<= real_rate(field_rates[field_index])) {dy=field_rates[field_index];dx=frame_rates[frame_index];if((field_rates[field_index]<=1000)11 (frame_rates[frame_index]<=1000))/*NB if both have the 100l then don’t bother!*/{if(field_rates[field_index]>1000) dx*=1001;if(frame_rates[frame_index]>1000) dy*=1001; } dy-=(2*dx); /*limit ratio by dividing by two */ while(((dx&amp;1)==0)&amp;&amp;((dy&amp;1)==0)) {dx>>=1;dy>>=1; } ratio=check_ratio(dx,dy,limits); printf(″output field rate=%d%s,input frame rate=%d%s\n″,field_rates[field_index], ((field_rates[field_index]>1000)?″/1001″″″), frame_rates[frame_index], ((frame_rates[frame_index]>1000)?″/1001″″)) printf(″dx=%d,dy=%d\n″,dx,dy); field_rate=frame_rates[frame_index]*ratio; if(frame_rates[frame_index]>1000)field_rate/=1001.00; printf(″ratio=%4.12g,field_rate=%4.12g\n″,ratio,field_rate); printf(field_rate=%4.12g/1001)\n″,field_rate*1001); printf(″min=%d,max=%d\n\n″,limits
,limits[1]) } }} }]]></pre>
前面各頁的程序得到以下輸出<pre listing-type="program-listing"><![CDATA[output field rate=50,input frame rate=24000/1001dx=12000,dy=1025ratio=2.0854166,field rate=49.9999984016(field rate=50049.9984/1001)min=-21950,max=2000output field rate=50,input frame rate=24dx=12,dy=1ratio=2.0833333,field rate=49.9999992(field rate=50049.9991992/1001)min=-22,max=0output field rate=50,input frame rate=25dx=25,dy=0ratio=2,field rate=50(field rate=50050/1001)min=-50,max=0output field rate=60000/1001,input frame rate=24000/1001dx=750,dy=375ratio=2.5,field rate=59.9400599401(field rate=60000/1001)min=-750,max=0output field rate=60000/1001,input frame rate=24dx=3003,dy=1494ratio=2.4975024,field rate=59.9400576(field rate=59999.9976576/1001)min=-3018,max=2982output field rate=60000/1001,input frame rate=25dx=25025,dy=9950ratio=2.3976023,field rate=59.9400575(field rate=59999.9975575/1001)min=-30150,max=19850output field rate=60000/1001,input frame rate=30000/1001dx=1875,dy=0ratio=2,field rate=59.9400599401(field rate=60000/1001)min=-3750,max=0]]></pre>
權(quán)利要求
1.一種將以較慢速率接收的數(shù)據(jù)幀變換為以較快速率產(chǎn)生的數(shù)據(jù)場的方法,包括下列步驟確定在一幀周期中場重復(fù)的基本整數(shù);通過快速與慢速率之比與在該幀周期中的該基本整數(shù)與較慢的幀速率之比的差值來計(jì)算場重復(fù)率的差;及當(dāng)重復(fù)場速率的差基本上與所計(jì)算的場重復(fù)速率的差不同時(shí),附加地重復(fù)或刪去所選重復(fù)場的場以保持以較快速率重復(fù)這些場。
2.根據(jù)權(quán)利要求1的方法,其中所選的重復(fù)速率小于較快的場速率,這些幀中所選的幀被額外地重復(fù)。
3.根據(jù)權(quán)利要求1的方法,其中所選的重復(fù)速率比較快的場速率快,重復(fù)幀的所選的幀被額外刪除。
4.根據(jù)權(quán)利要求1的方法,其中在一幀周期中場重復(fù)的基本整數(shù)是2。
5.根據(jù)權(quán)利要求1的方法,其中是根據(jù)Breshenham算法來進(jìn)行計(jì)算和增加或刪除重復(fù)場中的所選的場。
6.一種用于將以較慢速率接收的數(shù)據(jù)幀變換為以較快速率產(chǎn)生的數(shù)據(jù)場的設(shè)備,該設(shè)備包括一裝置,用于確定在一幀周期中場重復(fù)的基本整數(shù);一裝置,用于通過快速率與慢速率之比與在該幀周期中的該基本整數(shù)與較慢的幀速率之比的差值來計(jì)算場重復(fù)率的差;及一裝置,當(dāng)重復(fù)場速率的差基本上與所計(jì)算的場重復(fù)速率的差不同時(shí),用于額外地重復(fù)或刪除重復(fù)場的所選的場以保持以較快的速率重復(fù)這些場。
7.根據(jù)權(quán)利要求6的設(shè)備,進(jìn)一步包括用于產(chǎn)生一重復(fù)或刪除幀信號(hào)的裝置,該信號(hào)用于啟動(dòng)該裝置以重復(fù)或刪除重復(fù)幀中所選的幀。
全文摘要
一種在視頻解碼中變換較慢速率的幀數(shù)據(jù)為較快速率的場數(shù)據(jù)的方法,包括確定基本的場重復(fù)速率,以便在一幀周期中一場被重復(fù)整數(shù)次數(shù),通過從較快速率與較慢速率的加速比減去每幀周期的場與較慢速率之比計(jì)算重復(fù)速率的比率差,將該比率差與該場重復(fù)速率的差進(jìn)行比較,且當(dāng)這兩個(gè)差基本上不同時(shí),增加或刪除額外的場。
文檔編號(hào)H04N7/50GK1126412SQ9511637
公開日1996年7月10日 申請(qǐng)日期1995年8月23日 優(yōu)先權(quán)日1994年8月23日
發(fā)明者阿德里安·P·懷斯 申請(qǐng)人:Dva公司