两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種快速防止出現(xiàn)偽起始碼的方法及裝置的制作方法

文檔序號:7859175閱讀:208來源:國知局
專利名稱:一種快速防止出現(xiàn)偽起始碼的方法及裝置的制作方法
技術領域
本發(fā)明涉及ー種防止出現(xiàn)偽起始碼的方法及裝置,特別是涉及ー種將音視頻編碼數(shù)據(jù)組織成可隨機訪問數(shù)據(jù)流時的快速防止出現(xiàn)偽起始碼的方法。
背景技術
傳統(tǒng)的視頻編碼標準如ITU(International Telecommunication Union,國際電信聯(lián)盟)制定的 H. 261, H. 263, H. 263+, H. 264 標準以及 ISO (International Organizationfor Standardization,國際標準化組織)的 MPEG(Moving Pictures Experts Group,動態(tài)圖像專家組)組織制定的MPEG-I,MPEG-2,MPEG-4等都需把音視頻編碼數(shù)據(jù)組織成可隨機訪問數(shù)據(jù)流,以便解碼器可以從設置的隨機訪問點處開始解碼。在以上標準中都是通過 起始碼來實現(xiàn)編碼數(shù)據(jù)的隨機訪問的,例如視頻序列起始碼、圖像組起始碼、圖像起始碼等等。這些起始碼都是由起始碼前綴和起始碼值兩部分組成。起始碼前綴是ー個固定的ニ進制位串,標志ー個起始碼的存在;起始碼值是ー個數(shù)值,指出起始碼的含義。如果在其他編碼數(shù)據(jù)中出現(xiàn)了與起始碼前綴ー樣的ニ進制位串,則解碼器就有可能把該位串錯誤地當成起始碼前綴,從而引起解碼錯誤。這樣的ニ進制位串與緊隨其后的若干ニ進制位構成了偽起始碼。為了保證音視頻碼流的正確解碼,必須防止在碼流中出現(xiàn)偽起始碼。防止出現(xiàn)偽起始碼的通常方法是在設計碼流的語法結構時設置ー些禁止值和掩碼位。所謂禁止值是指禁止語法元素取某些值,因為如果該語法元素取了那些值,就有可能出現(xiàn)偽起始碼。所謂掩碼位,是指在可能出現(xiàn)偽起始碼的語法元素之間插入ー個固定的ニ進制位。上述的設置禁止值和掩碼位的方法有以下缺點a.増加了語法設計的復雜性。設計語法結構吋,要時時刻刻考慮到是否會出現(xiàn)偽起始碼,是否需要禁止一些值,是否需要插入掩碼位。b.降低了語法結構的易讀性。這些與壓縮編碼無關的語法元素混在語法結構中,使人不容易抓住要點。c.效率不高。在有可能產生偽起始碼的地方都必須采取措施,而不論語法元素的具體取值是否會真的產生偽起始碼。自從H. 264采用了算木編碼,上述的方法就不再具有可行性。專利號為US7839895的美國專利提出了一種能夠適應算術編碼的防偽起始碼方法。該方法對兩個起始碼之間的數(shù)據(jù)塊進行檢查,如果在某個字節(jié)對齊位置出現(xiàn)了連續(xù)的22個0,則在第22個0之后插入如下的8個比特11000000,從而避免了偽起始碼的出現(xiàn)。在解碼時進行相反的操作,檢查兩個起始碼之間的數(shù)據(jù)塊中是否出現(xiàn)了 0x000003,如果出現(xiàn)了,則刪除0x03.該方法在字節(jié)層面操作,實現(xiàn)起來比較方便。申請?zhí)枮?00310107985. X的中國專利申請?zhí)岢隽艘环N防偽起始碼方案。與美國專利US7839895的區(qū)別是該專利申請是在位層面進行操作,當在某個字節(jié)對齊位置出現(xiàn)了連續(xù)的22個0時,在第22個0之后插入I個或2個位來防止偽起始碼出現(xiàn)。美國專利US7839895和中國專利200310107985. X發(fā)明的兩類方法各有所長,但是它們有ー個共同的缺點,就是在解碼端,不論有沒有出現(xiàn)偽起始碼,都要首先逐個字節(jié)檢查是否存在插入的位,如果存在,則刪除這些插入的位。這ー過程需要一定的計算量,對于計算能力有限的解碼器來講,將是ー種負擔。

發(fā)明內容
為克服 上述現(xiàn)有技術存在的不足,本發(fā)明之目的在于提供ー種快速防止偽起始碼的方法及系統(tǒng),其可以使解碼端在進行解碼時以極小的計算量完成防偽起始碼的操作。為達上述及其它目的,本發(fā)明提供ー種快速防止偽起始碼的方法,包括編碼端處理方法及解碼端處理方法,其中,該編碼端處理方法包括如下步驟步驟一,在數(shù)據(jù)塊中的字節(jié)對齊位置尋找偽起始碼前綴,并記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置;步驟ニ,判斷偽起始碼前綴出現(xiàn)的次數(shù);步驟三,若該偽起始碼前綴出現(xiàn)的次數(shù)為0,則于該數(shù)據(jù)塊的第一個字節(jié)前插入ー最高位為I且包含該數(shù)據(jù)塊長度信息的字節(jié);若該偽起始碼前綴出現(xiàn)的次數(shù)大于0,則于該數(shù)據(jù)塊的第一個字節(jié)前插入1-4個非0字節(jié),且該1-4個非0字節(jié)記錄第一個偽起始碼前綴的位置信息;以及步驟四,根據(jù)ー預定的修改規(guī)則修改每個偽起始碼前綴所包含的三個字節(jié)的值,將它們修改為包含下ー個偽起始碼前綴或真起始碼前綴位置信息的值,且修改后的三個字節(jié)不會與前面或后面的字節(jié)構成新的偽起始碼前綴;該解碼端處理方法包括如下步驟步驟五,在接收到的數(shù)據(jù)流中尋找起始碼前綴,起始碼前綴后面的ー個字節(jié)為起始碼值;步驟六,解析緊跟在起始碼值之后的字節(jié)以判斷該數(shù)據(jù)塊中是否出現(xiàn)了偽起始碼如綴;步驟七,若該數(shù)據(jù)塊中沒有出現(xiàn)偽起始碼前綴,則根據(jù)該緊跟在起始碼值之后的字節(jié)的除最高位以外的7位獲得數(shù)據(jù)塊長度信息,也就是下ー個起始碼的位置信息,然后刪除該緊跟在起始碼值之后的字節(jié),轉到步驟十;若該數(shù)據(jù)塊中出現(xiàn)了偽起始碼前綴,則根據(jù)該緊跟在起始碼值之后的字節(jié)獲得插入的字節(jié)數(shù),井根據(jù)插入的字節(jié)獲得第一個偽起始碼前綴的位置信息,然后刪除插入的字節(jié);以及步驟八,根據(jù)獲得的第一個偽起始碼前綴的位置信息獲得第一個偽起始碼前綴所包含的三個字節(jié),根據(jù)第一個偽起始碼前綴所包含的三個字節(jié)獲得下ー個偽起始碼前綴或者下ー個真起始碼前綴的位置信息,并恢復第一個偽起始碼前綴所包含的三個字節(jié)的值;步驟九,根據(jù)下ー個偽起始碼前綴或真起始碼前綴的位置信息獲得下ー個偽起始碼前綴或真起始碼前綴所包含的三個字節(jié),如果該三個字節(jié)是真起始碼前綴,則該三個字節(jié)之前的數(shù)據(jù)就是所需數(shù)據(jù)塊,處理過程結束;如果該三個字節(jié)不是真起始碼前綴,則根據(jù)該三個字節(jié)的值獲取下一個偽起始碼前綴或真起始碼前綴的位置信息,并將該三個字節(jié)的值恢復為起始碼前綴的值,重復本步驟直到出現(xiàn)下ー個真起始碼前綴,獲得最終的數(shù)據(jù)塊;步驟十,根據(jù)獲得的下一個起始碼前綴的位置信息尋找下一個起始碼前綴,從該緊跟在起始碼值之后的字節(jié)的下一個字節(jié)到下一個起始碼前綴之間的所有字節(jié)為所需的數(shù)據(jù)塊。進ー步地,所述數(shù)據(jù)塊是指從當前起始碼(包括起始碼前綴和起始碼值)的下一個字節(jié)開始,到下ー個起始碼的第一個字節(jié)之前(不包括下ー個起始碼的第一個字節(jié))的所有數(shù)據(jù)。數(shù)據(jù)塊中出現(xiàn)的與起始碼前綴相同的若干連續(xù)字節(jié)被稱為‘偽起始碼前綴’,偽起始碼前綴與緊跟其后的一個字節(jié)形成的若干連續(xù)字節(jié)被稱為‘偽起始碼’。進ー步地,于步驟三中,若該偽起始碼前綴出現(xiàn)的次數(shù)為0,則于該數(shù)據(jù)塊的第一個字節(jié)前插入ー最高位為I且包含該數(shù)據(jù)塊長度信息的字節(jié),其值為(N% 128)+128,其中N是數(shù)據(jù)塊中包含的總字節(jié)數(shù)(不包含插入的字節(jié)),N% 128表示N除以128所得的余數(shù)。進ー步地,于步驟三中,若該偽起始碼前綴出現(xiàn)的次數(shù)大于0,于該數(shù)據(jù)塊的第一個字節(jié)前插入1-4個非0字節(jié)的步驟還包括如下步驟
將第一個偽起始碼前綴的位置信息表示成用1-4個字節(jié)表示的形式;根據(jù)第一個偽起始碼前綴的位置信息確定所需的插入字節(jié)數(shù)以及每個插入字節(jié)的值。進ー步地,將第一個偽起始碼前綴的位置信息表示成((v3*255+v2)*255+vl)*31+v0 的形式;若v3 > 0,則u為3 ;否則,如果v2 > 0,則u = 2 ;否則,如果vl > 0,則u = I ;否則,u = 0 ;在該數(shù)據(jù)塊的第一個字節(jié)前插入u+1個字節(jié),按從前到后的順序記為I
,I [I],I [2],I [3],其中 I
= (11<<5)+¥0+1,如果11>0,則1[1] = vl+1 ;如果 u > 1,則 1[2]=v2+l ;如果 u > 2,則 I [3] = v3+l。進ー步地,步驟四中的修改規(guī)則為對于最后ー個偽起始碼前綴,將其所包含的三個字節(jié)的值修改為包含下一個真起始碼前綴位置信息的值;對于非最后ー個偽起始碼前綴,將其所包含的三個字節(jié)的值修改為包含下ー個偽起始碼前綴位置信息的值。進ー步地,該修改規(guī)則為對于最后一個偽起始碼如綴B[p[i]] = N% 254+2 ;B[p[i]+1] = (N/254) % 255+1 ;B[p[i]+2] = (N/254/255) % 255+1 ;對于非最后一個偽起始碼如綴B [p [i] ] = p [i+1] % 254+2 ;B[p[i]+1] = (p[i+1]/254) % 255+1 ;B[p[i]+2] = (p [i+1]/254/255) % 255+1 ;其中,B[p[i]]、B[p[i]+l]、B[p[i]+2]為當前偽起始碼前綴對應的三個字節(jié),P [i+1]為下ー個偽起始碼前綴的位置,N為該數(shù)據(jù)塊長度(字節(jié)數(shù)),在數(shù)值上等于下ー個真起始碼前綴的位置。進ー步地,于步驟六中,若該緊跟在起始碼值之后的字節(jié)的最高位為1,則表示該數(shù)據(jù)塊中沒有出現(xiàn)偽起始碼;若該緊跟在起始碼值之后的字節(jié)的最高位為O,表示該數(shù)據(jù)塊中出現(xiàn)了偽起始碼。進ー步地,于步驟七中,若該數(shù)據(jù)塊中沒有出現(xiàn)偽起始碼,則根據(jù)如下方法獲得數(shù)據(jù)塊長度信息,也就是下ー個起始碼的位置信息N = (I
-128)+128 Xk其中1
是緊跟在起始碼值之后的字節(jié),N是數(shù)據(jù)塊的長度,k是ー個未知的非負整數(shù)。進ー步地,若該數(shù)據(jù)塊中出現(xiàn)了偽起始碼,于步驟七中,根據(jù)如下方法獲得該第一個偽起始碼前綴的位置信息U = 1
>> 5,·如果U = O,則 p
= (I
&0xlf)-l ;如果u = l,則 p
= (I
&0xlf)_l+(I [1]_1)*31 ;如果u = 2,則 p
= (I
&0xlf)-1+(I[1]-1+(I[2]_1)*255)*31 ;如果u = 3,則 p
= (I
&0xlf)-1+(1 [I]-1+(1 [2]-1+(1 [3]-I)*255)*255)*3I ;其中p
為該第一個偽起始碼前綴的位置。進ー步地,若該數(shù)據(jù)塊中出現(xiàn)了偽起始碼,于步驟八和步驟九中,根據(jù)如下方法獲得下一個偽起始碼前綴或真起始碼前綴的位置信息p [i+1] = B [p [i] ] -2+255* (B [p [i] +1] -1+255* (B [p [i] +2]-I))為達到上述及其他目的,本發(fā)明還提供一種自動快速防止偽起始碼的裝置,包括編碼裝置與解碼裝置,其中該編碼裝置至少包括記錄模組,用于在數(shù)據(jù)塊中的字節(jié)對齊位置尋找偽起始碼前綴,并記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置;判斷模組,判斷記錄的偽起始碼前綴出現(xiàn)的次數(shù);插入字節(jié)處理模組,根據(jù)判斷結果進行如下處理若偽起始碼前綴出現(xiàn)的次數(shù)為0,則在該數(shù)據(jù)塊的第一個字節(jié)前面插入ー最高位為I且包含該數(shù)據(jù)塊的長度信息的字節(jié);若偽起始碼前綴出現(xiàn)的次數(shù)大于0,則于該數(shù)據(jù)塊的第一個字節(jié)前插入1-4個非0字節(jié),該1-4個非0字節(jié)記錄第一個偽起始碼的位置信息;以及偽起始碼前綴修改模組,根據(jù)預定的修改規(guī)則修改每個偽起始碼前綴所包含的三個字節(jié)的值,將當前偽起始碼前綴所包含的三個字節(jié)的值修改為包含下ー個偽起始碼前綴或真起始碼前綴位置信息的值,且修改后的三個字節(jié)不會與前面或后面的字節(jié)構成新的偽起始碼前綴;解碼裝置至少包括查找模組,于接收到的數(shù)據(jù)流中尋找起始碼前綴;解析模組,解析緊跟在起始碼值之后的字節(jié);位置獲取模組,以于解析模組的解析結果為碼流中出現(xiàn)了偽起始碼時,根據(jù)緊跟在起始碼值之后的字節(jié)獲得插入的字節(jié)數(shù),井根據(jù)插入的字節(jié)獲得第一個偽起始碼前綴的位置信息;以及數(shù)據(jù)塊恢復模組,刪除緊跟在起始碼值之后的插入的1-4個字節(jié),根據(jù)獲得的第ー個偽起始碼前綴的位置信息獲得該第一個偽起始碼前綴所包含的三個字節(jié),井根據(jù)預定的修改規(guī)則恢復第一個偽起始碼前綴所包含的三個字節(jié)的值,同時獲得下一個偽起始碼前綴或真起始碼前綴的位置信息,依次類推直到出現(xiàn)真起始碼前綴,獲得最終的數(shù)據(jù)塊,同吋,該數(shù)據(jù)塊恢復模組于解析模組的解析結果為碼流中沒有出現(xiàn)偽起始碼前綴時,根據(jù)緊跟在起始碼值之后的字節(jié)中包含的數(shù)據(jù)塊長度信息獲得下ー個起始碼,去掉緊跟在起始碼值之后的字節(jié),獲取其下一個字節(jié)到下一個起始碼之間的所有字節(jié)為最終所需數(shù)據(jù)塊。進ー步地,該插入字節(jié)處理模組于該偽起始碼前綴出現(xiàn)的次數(shù)大于0時,將該第ー個偽起始碼前綴的位置信息表示成((v3*255+v2)*255+vl)*31+v0的形式,并根據(jù)v3、v2、vl及vO的數(shù)值情況確定所需插入的字節(jié)數(shù),再根據(jù)所需插入的字節(jié)數(shù)在該數(shù)據(jù)塊的第 ー個字節(jié)前插入相應字節(jié)數(shù)的記錄第一個偽起始碼的位置信息的非0字節(jié)。進ー步地,該修改規(guī)則為對于最后ー個偽起始碼前綴,將其修改為包含下ー個真起始碼前綴位置信息的值,且其第一個字節(jié)修改為大于等于2的值,第二字節(jié)和第三字節(jié)修改為非0 ;對于非最后ー個偽起始碼前綴,將其修改為包含下ー個偽起始碼前綴位置信息的值,且其第一個字節(jié)為大于等于2的值,第二字節(jié)和第三字節(jié)為非0值。與現(xiàn)有技術相比,本發(fā)明ー種自動快速防止偽起始碼的方法及系統(tǒng),通過于編碼端記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置,井根據(jù)相應規(guī)則于數(shù)據(jù)塊第I個字節(jié)前插入1-4個非0字節(jié)形成新的數(shù)據(jù)塊,使所形成的新的數(shù)據(jù)塊中不會存在偽起始碼前綴,于解碼端通過相應的規(guī)則恢復所需數(shù)據(jù)塊,使得解碼端處理過程中,不需要在每個字節(jié)對齊位置判斷是否出現(xiàn)了插入的數(shù)據(jù)或起始碼,極大地降低了解碼端處理過程的計算量。


圖I為本發(fā)明ー種快速防止偽起始碼的方法之編碼端的處理方法的步驟流程圖;圖2為本發(fā)明ー種快速防止偽起始碼的方法之解碼端的處理方法的步驟流程圖;圖3為本發(fā)明較佳實施例中在數(shù)據(jù)塊B之前插入的I 4個字節(jié)的結構示意圖;圖4為本發(fā)明較佳實施例中在數(shù)據(jù)塊B內部出現(xiàn)偽起始碼前綴的位置給三個字節(jié)重新賦值的示意圖;圖5為本發(fā)明較佳實施例中沒有出現(xiàn)偽起始碼前綴時的解碼端處理過程示意圖;圖6為本發(fā)明較佳實施例中出現(xiàn)偽起始碼前綴時的解碼端處理過程示意圖;圖7為本發(fā)明ー種快速防止偽起始碼的系統(tǒng)的系統(tǒng)架構圖。
具體實施例方式以下通過特定的具體實例并結合

本發(fā)明的實施方式,本領域技術人員可由本說明書所掲示的內容輕易地了解本發(fā)明的其它優(yōu)點與功效。本發(fā)明亦可通過其它不同的具體實例加以施行或應用,本說明書中的各項細節(jié)亦可基于不同觀點與應用,在不背離本發(fā)明的精神下進行各種修飾與變更。假設兩個起始碼之間的數(shù)據(jù)塊B共包含N個字節(jié),可以表示成B= {B
,B[1],B[2],...,B[N_1]}起始碼前綴為0x000001,即23個‘0’加I個‘ I’,而且總是出現(xiàn)在字節(jié)對齊位置。
本發(fā)明之快速防止偽起始碼的方法,包括編碼端的處理方法與解碼端的處理方法,圖I為本發(fā)明ー種快速防止偽起始碼的方法之編碼端的處理方法的步驟流程圖,如圖I所示,編碼端的處理方法,包括步驟101,在數(shù)據(jù)塊B中的字節(jié)對齊位置尋找偽起始碼前綴0x000001,并記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置,形式為{p
,p[l],...,P[M-1]},其中M>=0,是偽起始碼前綴出現(xiàn)的次數(shù),P [i]為第i次出現(xiàn)的偽起始碼前綴的第一個字節(jié)的位置,也即在數(shù)據(jù)塊B中的序號,P [i]的取值范圍是0. .N-3 ;步驟102,判斷偽起始碼前綴出現(xiàn)的次數(shù)M ;步驟103,若M = 0,即數(shù)據(jù)塊B中沒有出現(xiàn)偽起始碼前綴,則在數(shù)據(jù)塊B的第I個字節(jié),即B
,前面插入ー個字節(jié)記為1
,1
最高位應為1,且至少包含數(shù)據(jù)塊B的長度イ目息;步驟104,若M > 0,則于數(shù)據(jù)塊B的第I個字節(jié)前插入1_4個非0字節(jié),這1_4個非0字節(jié)記錄第一個偽起始碼的位置信息P
;具體來說,首先將p
表示成((v3*255+v2)*255+vl)*31+v0的形式;然后根據(jù)v3, v2, vl, vO確定所需插入的字節(jié)數(shù)及姆個插入字節(jié)的值,如若v3 > 0,則u = 3 ;否則,如果v2 > 0,則u = 2 ;否則,如果vl > 0,則u = I ;否則,u = 0 ;在B
前插入 u+1 個字節(jié),記為 1
,1[1],1[2],1[3]。其中 I
= (uくく 5)+v0+l。如果 u > 0,貝丨J I [I] = vl+1。如果 u > 1,貝丨J I [2] = v2+l。如果 u > 2,貝丨JI [3] = v3+l。步驟105,根據(jù)預定的修改規(guī)則修改每個偽起始碼前綴所包含的三個字節(jié)的值,該修改規(guī)則為對于最后ー個偽起始碼前綴所包含的三個字節(jié),將其修改為包含下ー個真起始碼前綴位置信息的值B[p[i]] = N% 254+2 ;B[p[i]+1] = (N/254) % 255+1 ;B[p[i]+2] = (N/254/255) % 255+1 ;其中i = M-l.對于非最后ー個偽起始碼前綴所包含的三個字節(jié)B [p [i] ] = p [i+1] % 254+2 ;B[p[i]+1] = (p[i+1]/254) % 255+1 ;B[p[i]+2] = (p [i+1]/254/255) % 255+1 ;其中0彡i彡M-2。按照上述規(guī)則修改后,每個偽起始碼前綴所包含的第一個字節(jié)為大于等于2的值,第二字節(jié)和第三字節(jié)為非0值,這樣可以保證不會與它們前面或后面的任何字節(jié)構成新的偽起始碼前綴。以上為本發(fā)明之編碼端的處理方法。圖2為本發(fā)明ー種快速防止偽起始碼的方法之解碼端的處理方法的步驟流程圖,相應的,解碼端的處理方法包括如下步驟步驟201,在接收到的數(shù)據(jù)流中尋找起始碼前綴0x000001。起始碼前綴后面的ー個字節(jié)是起始碼值,從起始碼值后面的一個字節(jié)開始是數(shù)據(jù)塊Be = {1
,...,B
,B[l],…}。此時Be的長度未知;步驟202,解析緊跟在起始碼值之后的字節(jié),即I [O]。如果1
>= 128,表示碼流中沒有出現(xiàn)偽起始碼前綴,則轉步驟203 ;如果1
< 128,表示碼流中出現(xiàn)了偽起始碼,轉步驟204。步驟203,根據(jù)緊跟在起始碼值后的字節(jié)中包含的數(shù)據(jù)塊長度信息獲得數(shù)據(jù)塊長度信息,也就是下ー個起始碼前綴的位置信息,根據(jù)獲得的下一個起始碼前綴的位置信息尋找下一個起始碼前綴,從該緊跟在起始碼值之后的字節(jié)的下一個字節(jié)到下ー個起始碼前綴之間的所有字節(jié)為所需的數(shù)據(jù)塊B,解碼端處理過程結束;在此再說明一下,這里所說的數(shù)據(jù)塊是指從當前起始碼(包括起始碼前綴和起始碼值)的下ー個字節(jié)開始,到下ー個起始碼的第一個字節(jié)之前(不包括下一 個起始碼的第一個字節(jié))的所有數(shù)據(jù)。數(shù)據(jù)塊中出現(xiàn)的與起始碼前綴相同的若干連續(xù)字節(jié)被稱為‘偽起始碼前綴’,偽起始碼前綴與緊跟其后的一個字節(jié)形成的若干連續(xù)字節(jié)被稱為‘偽起始碼’。步驟204,根據(jù)緊跟在起始碼值之后的字節(jié)獲得插入的字節(jié)數(shù),井根據(jù)插入的字節(jié)獲得第一個偽起始碼前綴的位置信息,然后刪除插入的字節(jié);具體來說,u= I
> > 5,如果u = 0,則 p
= (I
&0xlf)-l ;如果u = l,則 p
= (I
&0xlf)-l+(I [1]-1)*31 ;如果u = 2,則 p
= (I
&0xlf)-l+(I[l]-l+(I[2]-l)*255)*31 ;如果u = 3,則 p
= (I
&0xlf)-1+(1 [I]-1+(1 [2]-1+(1 [3]-I)*255)*255)*3
Io步驟205,根據(jù)獲得的第一個偽起始碼前綴的位置信息獲得第一個偽起始碼前綴所包含的三個字節(jié),根據(jù)第一個偽起始碼前綴所包含的三個字節(jié)獲得下ー個偽起始碼前綴或者下ー個真起始碼前綴的位置信息,并恢復第一個偽起始碼前綴所包含的三個字節(jié)的值;步驟206,根據(jù)下ー個偽起始碼前綴或真起始碼前綴的位置信息獲得下一個偽起始碼前綴或真起始碼前綴所包含的三個字節(jié),并進行相應處理。如果該三個字節(jié)是真起始碼前綴,則該三個字節(jié)之前的數(shù)據(jù)就是所需數(shù)據(jù)塊,處理過程結束;如果該三個字節(jié)不是真起始碼前綴,則根據(jù)該三個字節(jié)的值獲取下一個偽起始碼前綴或真起始碼前綴的位置信息,并將該三個字節(jié)的值恢復為起始碼前綴的值,重復本步驟直到出現(xiàn)下ー個真起始碼前綴,獲得最終的數(shù)據(jù)塊。以下將配合一具體實施例來進ー步說明本發(fā)明ー種快速防止偽起始碼的方法編碼端與解碼端的處理過程。圖3為本發(fā)明較佳實施例中在數(shù)據(jù)塊B之前插入的I 4個字節(jié)的結構示意圖,圖4為本發(fā)明較佳實施例中在數(shù)據(jù)塊B內部出現(xiàn)偽起始碼前綴的位置給三個字節(jié)重新賦值的示意圖。配合圖3及圖4,首先編碼端的處理過程如下(I)在數(shù)據(jù)塊B中的字節(jié)對齊位置尋找偽起始碼前綴0x000001,記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置,形式為{p
,p[l],...,p[M-l]},其中M> = 0,是偽起始碼前綴出現(xiàn)的次數(shù),p[i]為第i次出現(xiàn)的偽起始碼前綴的第一個字節(jié)的位置,也即在數(shù)據(jù)塊B中的序號,P[i]的取值范圍是0..N-3。
(2)若M = 0,即數(shù)據(jù)塊B中沒有出現(xiàn)偽起始碼前綴,則在數(shù)據(jù)塊B的第I個字節(jié),即B
,前面插入ー個字節(jié),該記為I
,該字節(jié)最高位應為I,且至少包含數(shù)據(jù)塊B的長度信息,即1
= 128+(N% 128),編碼端的處理過程結束。(3) M > 0,則執(zhí)行以下步驟步驟3. 1,把 p
表示成((v3*255+v2)*255+vl)*31+v0 的形式,其中vO = p
% 31 ;vl = (p
/31) % 255 ;v2 = (p
/31/255) % 255 ;v3 = (p
/31/255/255) % 255 ; 步驟3. 2,根據(jù)v3, v2, vl, vO的數(shù)值情況計算p
所需的插入字節(jié)數(shù)u。如果v3> 0,則u = 3 ;否則,如果v2 > 0,則u = 2 ;否則,如果vl > 0,則u = I ;否則,u = 0 ;步驟3. 3,在 B
前插入 u+1 個字節(jié),記為 1
,1[1],1[2],1[3]。其中 1
=(u << 5) +vO+lo 如果 u > 0,貝丨J I [I] = vl+1。如果 u > I,則 I [2] = v2+l0 如果 u > 2,則I [3] = v3+l,如圖3所示;步驟3.4,令i = 0;步驟3. 5,如果i = M-I,則轉到步驟3. 7 ;步驟3. 6,令B[p[i]] = p[i+l] % 254+2 ;B[p[i]+1] = (p[i+1]/254) % 255+1 ;B[p[i]+2] = (p [i+1]/254/255) % 255+1 ;i = i+1 ;轉步驟3. 5;步驟3. 7,令B[p[i]] = N% 254+2 ;B[p[i]+1] = (N/254) % 255+1 ;B[p[i]+2] = (N/254/255) % 255+1 ;編碼端處理過程結束。上述的編碼端處理過程,對被處理的數(shù)據(jù)塊B的字節(jié)數(shù)是有限制的,即N應小于255*255*254 = 16516350。這個數(shù)對于絕大多數(shù)音視頻編碼數(shù)據(jù)塊是夠用的。高清視頻節(jié)目一幀的數(shù)據(jù)量在壓縮前只有3M字節(jié),即使對于8k*4k的超高清節(jié)目,每幀的數(shù)據(jù)量在壓縮前也只有48M字節(jié),壓縮比只要達到三比一,就不會超出上述的限制。上述的編碼端處理過程,可以保證在處理過程結束以后,所形成的新的數(shù)據(jù)塊Be={1
, ,B
,B[l],…,B[N-1]}中不會存在偽起始碼前綴,也就不會存在偽起始碼。在數(shù)據(jù)塊Be的開頭,插入的字節(jié)都是非0的,不會與B
,B[l]構成新的偽起始碼前綴。另外,數(shù)據(jù)塊Be前面是起始碼,即OxOOOOOlxx,即使xx = 00,也不會形成新的偽起始碼。在數(shù)據(jù)塊Be的中間,出現(xiàn)偽起始碼前綴的位置上,三個字節(jié)的值都被修改為非0的值,不會和其后的字節(jié)組合成新的偽起始碼前綴。特別是第一個字節(jié)被修改為大于等于2的值。即使其前面出現(xiàn)若干個連續(xù)的值為0的字節(jié),也不會形成新的偽起始碼前綴。圖5為本發(fā)明較佳實施例中沒有出現(xiàn)偽起始碼時的解碼端處理過程示意圖;圖6為本發(fā)明較佳實施例中出現(xiàn)偽起始碼時的解碼端處理過程示意圖。配合圖5及圖6,解碼端的處理過程包括以下步驟(I)在數(shù) 據(jù)流中尋找起始碼前綴0x000001。起始碼前綴后面的ー個字節(jié)是起始碼值,從起始碼值后面的一個字節(jié)開始是數(shù)據(jù)塊Be = {I
,...,B
,B[1],...}。此時Be的長度未知。(2)解析I
,即緊跟在起始碼值后面的字節(jié)。如果1
>= 128,表示碼流中沒有出現(xiàn)偽起始碼,轉步驟(3);如果1
< 128,表示碼流中出現(xiàn)了偽起始碼,轉步驟(6)。(3)令offset = I
-128,則下ー個起始碼出現(xiàn)在B
,即I
的下一個字節(jié),之后第offset+k*128的位置,其中k = 0,1,2, (4)在B
之后offset+k*128的位置(k = 0,1,2,…)搜索起始碼,直到遇到下ー個起始碼。(5)去掉1
,從1
的下一個字節(jié)到下一個起始碼之前的所有字節(jié)就是B。解碼端處理過程結束。(6)令 u = I
> > 5,如果 u = 0,貝丨J p
= (I
&0xlf)-l ;如果 u = I,貝丨Jp
= (I
&0xlf)-l+(I[l]-l)*31 ;如果 u = 2,則 p
= (I
&0xlf)-1+(I[1]-1+(I-I) *255) *31 ;如果 u = 3,則 p
= (I
&0xlf)-1+(1 [I]-1+(1 [2]-1+(1 [3]-I) *255)*255)*31(7) i = I ;(8)p[i] = B[p[i-l]]-2+(B[p[i-l]+l]-l+(B[p[i-l]+2]_l)*255)*254(9)令 B[p[i-1]] = 0, B[p[i-1]+1] = 0, B[p[i_l]+2] = I(10)如果 B[p[i]] =0 且 B[p[i]+1] =0 且 B[p[i]+2] = I,則解碼端處理過程結束。數(shù)據(jù)塊B= {B
,B[l],...,B[p[i]-l]}是恢復的數(shù)據(jù)塊。否則令i = i+l,轉到步驟(8)由上述的解碼端處理過程可知,在解碼端處理過程中,不需要在每個字節(jié)對齊位置判斷是否出現(xiàn)了插入的數(shù)據(jù)或起始碼,只需要根據(jù)在開始位置解析得到的P
,就可以直接找到偽起始碼出現(xiàn)的位置,將其恢復,并同時得到下一個偽起始碼的位置,依次類推直到出現(xiàn)下ー個真正的起始碼,解碼端處理過程結束。與美國專利US7839895和中國專利申請200310107985. X的方案相比,極大地降低了解碼端處理過程的計算量。如果碼流中沒有出現(xiàn)偽起始碼,在解碼端處理過程中,不需要在每個字節(jié)對齊位置判斷是否遇到下ー個起始碼。解碼端可以根據(jù)I(O)獲得ー個偏移值offset,然后在B
之后offset+k*128的位置(k = 0,1,2, ...)搜索起始碼,直到遇到下ー個起始碼。比起在每個字節(jié)對齊位置判斷是否遇到起始碼的方法,本發(fā)明所需的判斷次數(shù)下降為原來的1/128。圖7為本發(fā)明ー種快速防止偽起始碼的系統(tǒng)的系統(tǒng)架構圖。如圖7所示,本發(fā)明ー種防止偽起始碼的系統(tǒng),包括編碼裝置70及解碼裝置71。其中編碼裝置70包括記錄模組701、判斷模組702、插入字節(jié)處理模組703以及偽起始碼前綴修改模組704。記錄模組701用于在數(shù)據(jù)塊B中的字節(jié)對齊位置尋找偽起始碼前綴0x000001,并記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置,形式為{p
, p[l],,P [M-l]},其中M > = 0,是偽起始碼前綴出現(xiàn)的次數(shù),p [i]為第i次出現(xiàn)的偽起始碼前綴的第一個字節(jié)的位置,也即在數(shù)據(jù)塊B中的序號,p[i]的取值范圍是0.. N-3;判斷模組702,判斷記錄的偽起始碼前綴出現(xiàn)的次數(shù);插入字節(jié)處理模組703,根據(jù)判斷結果進行如下處理若M = 0,即數(shù)據(jù)塊B中沒有出現(xiàn)偽起始碼前綴,則在數(shù)據(jù)塊B的第I個字節(jié),即B
,前面插入ー個字節(jié)記為1
,1
最高位應為I,且至少包含數(shù)據(jù)塊B的長度信息;若M > 0,則于數(shù)據(jù)塊B的第I個字節(jié)前插入1-4個非0字節(jié),這1-4個非0字節(jié)記錄第一個偽起始碼的位置信息p
;具體來說,首先將p
表示成((v3*255+v2)*255+vl)*31+v0的形式;然后根據(jù)v3,v2,vl,v0的數(shù)值情況確定所需的插入字節(jié)數(shù),如若v3 > 0,則u = 3 ;否則,如果v2 > 0,則u = 2 ;否則,如果vl > 0,則u = I ;否則,u = 0 ;
在B
前插入 u+1 個字節(jié),記為 1
,1[1],1[2],1[3]。其中 I
= (uくく 5)+v0+l。如果 u > 0,貝丨J I [I] = vl+1。如果 u > 1,貝丨J I [2] = v2+l。如果 u > 2,貝丨JI [3] = v3+l。偽起始碼前綴修改模組704,根據(jù)預定的修改規(guī)則修改每個偽起始碼前綴所包含的三個字節(jié)的值,獲得新的數(shù)據(jù)塊Be。將每個偽起始碼前綴所包含的第一個字節(jié)修改為大于等于2的值,第二字節(jié)和第三字節(jié)修改為非0值,該修改規(guī)則為對于最后一個偽起始碼如綴B[p[i]] = N% 254+2 ;B[p[i]+1] = (N/254) % 255+1 ;B[p[i]+2] = (N/254/255) % 255+1 ;其中i =M-L對于非最后一個偽起始碼如綴B [p [i] ] = p [i+1] % 254+2 ;B[p[i]+1] = (p[i+1]/254) % 255+1 ;B[p[i]+2] = (p [i+1]/254/255) % 255+1 ;其中0彡i彡M-2。按照上述規(guī)則修改后,每個偽起始碼前綴所包含的第一個字節(jié)為大于等于2的值,第二字節(jié)和第三字節(jié)為非0值,這樣可以保證不會與它們前面或后面的任何字節(jié)構成新的偽起始碼前綴。解碼裝置71包括查找模組710、解析模組720、位置獲取模組730以及數(shù)據(jù)塊恢復模組740。查找模組710,于接收到的數(shù)據(jù)流中尋找起始碼前綴0x000001。起始碼前綴后面的ー個字節(jié)是起始碼值,從起始碼值后面的一個字節(jié)開始是數(shù)據(jù)塊Be = {I
,...,B
,B [I],. . . }。此時Be的長度未知;解析模組720,解析緊跟在起始碼值后的字節(jié),即I
,如果1
>= 128,表示碼流中沒有出現(xiàn)偽起始碼前綴,如果I
< 128,表示碼流中出現(xiàn)了偽起始碼前綴;位置獲取模組730,以于解析模組的解析結果為碼流中出現(xiàn)了偽起始碼前綴時,根據(jù)緊跟在起始碼值后的字節(jié)獲得插入的字節(jié)數(shù),井根據(jù)插入的字節(jié)獲得第一個偽起始碼前綴的位置信息,具體來說,U= 1
>>5,
如果u = 0,則 p
= (I
&0xlf)-l ;如果u = l,則 p
= (I
&0xlf)-l+(I [1]-1)*31 ;如果u = 2,則 p
= (I
&0xlf)-1+(I[1]-1+(I[2]_1)*255)*31 ;如果u = 3,則 p
= (I
&0xlf)-1+(1 [I]-1+(1 [2]-1+(1 [3]-I)*255)*255)*3
Io數(shù)據(jù)塊恢復模組740,刪除緊跟在起始碼值后的插入的1-4個字節(jié),根據(jù)獲得的第ー個偽起始碼前綴的位置信息獲得第一個偽起始碼前綴所包含的三個字節(jié),井根據(jù)預定的修改規(guī)則恢復第一個偽起始碼前綴所包含的三個字節(jié)的值,同時獲得下ー個偽起始碼前綴或真起始碼前綴的位置信息,依次類推直到出現(xiàn)真起始碼前綴,獲得最終的數(shù)據(jù)塊,同吋,于解析模組的解析結果為數(shù)據(jù)塊中沒有出現(xiàn)偽起始碼前綴時,根據(jù)緊跟在起始碼值后的字 節(jié)中包含的數(shù)據(jù)塊長度信息獲得下ー個起始碼,去掉緊跟在起始碼值后的字節(jié),其下ー個字節(jié)到下一個起始碼之間的所有字節(jié)就是所需的數(shù)據(jù)塊??梢姡景l(fā)明ー種自動快速防止偽起始碼的方法及系統(tǒng),通過于編碼端記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置,井根據(jù)相應規(guī)則于數(shù)據(jù)塊第I個字節(jié)前插入1-4個非0字節(jié)形成新的數(shù)據(jù)塊,使所形成的新的數(shù)據(jù)塊中不會存在偽起始碼前綴,于解碼端通過相應的規(guī)則恢復所需數(shù)據(jù)塊,使得解碼端處理過程中,不需要在每個字節(jié)對齊位置判斷是否出現(xiàn)了插入的數(shù)據(jù)或起始碼,極大地降低了解碼端處理過程的計算量。上述實施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何本領域技術人員均可在不違背本發(fā)明的精神及范疇下,對上述實施例進行修飾與改變。因此,本發(fā)明的權利保護范圍,應如權利要求書所列。
權利要求
1.一種快速防止偽起始碼的方法,包括編碼端處理方法及解碼端處理方法,其特征在于,該編碼端處理方法包括如下步驟 步驟一,在數(shù)據(jù)塊中的字節(jié)對齊位置尋找偽起始碼前綴,并記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置; 步驟二,判斷偽起始碼前綴出現(xiàn)的次數(shù); 步驟三,若該偽起始碼前綴出現(xiàn)的次數(shù)為O,則于該數(shù)據(jù)塊的第一個字節(jié)前插入一最高位為I且包含該數(shù)據(jù)塊長度信息的字節(jié);若該偽起始碼前綴出現(xiàn)的次數(shù)大于O,則于該數(shù)據(jù)塊的第一個字節(jié)前插入1-4個非O字節(jié),且該1-4個非O字節(jié)記錄第一個偽起始碼的位置"[目息;以及 步驟四,根據(jù)一預定的修改規(guī)則修改每個偽起始碼前綴所包含的三個字節(jié)的值,將當前偽起始碼前綴所包含的三個字節(jié)的值修改為包含下一個偽起始碼前綴或真起始碼前綴位置信息的值,且修改后的該當前偽起始碼前綴所包含的三個字節(jié)不會和前面或后面的任何字節(jié)構成新的偽起始碼前綴; 該解碼端處理方法包括如下步驟 步驟五,在接收到的數(shù)據(jù)流中尋找起始碼前綴,起始碼前綴后面的一個字節(jié)為起始碼值; 步驟六,解析緊跟在起始碼值之后的字節(jié)以判斷數(shù)據(jù)塊中是否出現(xiàn)了偽起始碼; 步驟七,若數(shù)據(jù)塊中沒有出現(xiàn)偽起始碼,則根據(jù)該緊跟在起始碼值之后的字節(jié)獲得下一個起始碼前綴的位置信息,去掉該緊跟在起始碼值之后的字節(jié),轉到步驟十;若數(shù)據(jù)塊中出現(xiàn)了偽起始碼前綴,則根據(jù)該緊跟在起始碼值之后的字節(jié)獲得插入的字節(jié)數(shù),并根據(jù)插入的字節(jié)獲得第一個偽起始碼前綴的位置信息,然后刪除插入的字節(jié);以及 步驟八,根據(jù)獲得的第一個偽起始碼前綴的位置信息獲得第一個偽起始碼前綴所包含的三個字節(jié),根據(jù)第一個偽起始碼前綴所包含的三個字節(jié)獲得下一個偽起始碼前綴或者下一個真起始碼前綴的位置信息,并恢復第一個偽起始碼前綴所包含的三個字節(jié)的值; 步驟九,根據(jù)下一個偽起始碼前綴或真起始碼前綴的位置信息獲得所包含的三個字節(jié),如果該三個字節(jié)是真起始碼前綴,則該三個字節(jié)之前的數(shù)據(jù)就是所需數(shù)據(jù)塊,處理過程結束;如果該三個字節(jié)不是真起始碼前綴,則根據(jù)該三個字節(jié)的值獲取下一個偽起始碼前綴或真起始碼前綴的位置信息,并將該三個字節(jié)的值恢復為起始碼前綴的值,重復本步驟直到出現(xiàn)下一個真起始碼前綴,獲得最終的數(shù)據(jù)塊; 步驟十,根據(jù)獲得的下一個起始碼前綴的位置信息尋找下一個起始碼前綴,從該緊跟在起始碼值之后的字節(jié)的下一個字節(jié)到下一個起始碼前綴之間的所有字節(jié)為所需的數(shù)據(jù)塊。
2.如權利要求I所述的一種自動快速防止偽起始碼的方法,其特征在于所述數(shù)據(jù)塊是指從包括起始碼前綴和起始碼值的當前起始碼的下一個字節(jié)開始,到下一個起始碼的第一個字節(jié)之前的所有數(shù)據(jù)。
3.如權利要求2所述的一種自動快速防止偽起始碼的方法,其特征在于, 于步驟三中,若該偽起始碼前綴出現(xiàn)的次數(shù)為O,則于該數(shù)據(jù)塊的第一個字節(jié)前插入一最高位為I且包含該數(shù)據(jù)塊長度信息的字節(jié),其值為(N%128)+128,其中N是數(shù)據(jù)塊中包含的總字節(jié)數(shù),N%128表示N除以128所得的余數(shù)。
4.如權利要求3所述的一種自動快速防止偽起始碼的方法,其特征在于, 于步驟三中,若該偽起始碼前綴出現(xiàn)的次數(shù)大于O,于該數(shù)據(jù)塊的第一個字節(jié)前插入1-4個非O字節(jié)的步驟還包括如下步驟 將第一個偽起始碼前綴的位置信息表示成用1-4個字節(jié)表示的形式,根據(jù)第一個偽起始碼前綴的位置信息確定所需的字節(jié)數(shù)以及每個字節(jié)的值。
5.如權利要求4所述的一種自動快速防止偽起始碼的方法,其特征在于 將第一個偽起始碼前綴的位置信息表示成((v3*255+v2)*255+vl)*31+v0的形式; 若v3>0,則u為3 ;否則,如果v2>0,則u=2 ;否則,如果vl>0,則u=l ;否則,U=O ; 在該數(shù)據(jù)塊的第一個字節(jié)前插入u+1個字節(jié),記為I
,I[1],I[2],I[3],其中I
= (u 5)+v0+l,如果 u>0,則 I[l]=vl+1 ;如果 u>l,則 I[2]=v2+1 ;如果 u>2,則I[3]=v3+l。
6.如權利要求I所述的一種自動快速防止偽起始碼的方法,其特征在于,步驟四所述的修改規(guī)則為 對于最后一個偽起始碼前綴,將其修改為包含下一個真起始碼前綴位置信息的值; 對于非最后一個偽起始碼前綴,將其修改為包含下一個偽起始碼前綴位置信息的值。
7.如權利要求6所述的一種自動快速防止偽起始碼的方法,其特征在于,該修改規(guī)則為 對于最后一個偽起始碼前綴所包含的三個字節(jié),B[p[i]]=N%254+2;B[p[i]+l] = (N/254)%255+l;B[p[i]+2]=(N/254/255)%255+l; 其中P[i]為最后一個偽起始碼前綴的位置,N為該數(shù)據(jù)塊的長度; 對于非最后一個偽起始碼前綴B[p[i]]=p[i+l]%254+2;B[p[i]+1]=(p[i+1]/254)%255+1;B[p[i]+2]=(p[i+1]/254/255)%255+l; 其中,B[p[i]]、B[p[i]+l]、B[p[i]+2]為當前偽起始碼前綴所包含的三個字節(jié),p[i+l]為下一個偽起始碼前綴的位置。
8.如權利要求I所述的一種自動快速防止偽起始碼的方法,其特征在于于步驟六中,若該緊跟在起始碼值之后的字節(jié)大于等于128,則表示該數(shù)據(jù)塊中沒有出現(xiàn)偽起始碼前綴;若該緊跟在起始碼值之后的字節(jié)小于128,則表示該數(shù)據(jù)塊中出現(xiàn)了偽起始碼前綴。
9.如權利要求8所述的一種自動快速防止偽起始碼的方法,其特征在于,于步驟七中,若該數(shù)據(jù)塊中沒有出現(xiàn)偽起始碼,則根據(jù)如下方法獲得數(shù)據(jù)塊長度信息,也就是下一個起始碼的位置信息N= (I
-128)+128 Xk 其中1
是緊跟在起始碼值之后的字節(jié),N是數(shù)據(jù)塊的長度,k是一個未知的非負整數(shù)。
10.如權利要求8所述的一種自動快速防止偽起始碼的方法,其特征在于,于步驟七中,若該數(shù)據(jù)塊中出現(xiàn)了偽起始碼,根據(jù)如下方法獲得該第一個偽起始碼前綴的位置信息u=I
5,如果 u=0,則 p
= (I
&0xlf)-l ;如果 U=I,則 p
= (I
&0xlf)-l+(I[l]-l)*31 ;如果 11=2,則 p
= (I
&0xlf)-l+(I[l]-l+(I[2]-l)*255)*31 ;如果 u=3,則 p
= (I
&0xlf)-l+(I[l]-l+(I[2]-l+(I[3]-l)*255)*255)*31 ; 其中P
為該第一個偽起始碼前綴的位置。
11.一種自動快速防止偽起始碼的系統(tǒng),包括編碼裝置與解碼裝置,其特征在于,該編碼裝置至少包括 記錄模組,用于在數(shù)據(jù)塊中的字節(jié)對齊位置尋找偽起始碼前綴,并記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置; 判斷模組,判斷記錄的偽起始碼前綴出現(xiàn)的次數(shù); 插入字節(jié)處理模組,根據(jù)判斷結果進行如下處理若偽起始碼前綴出現(xiàn)的次數(shù)為0,則在該數(shù)據(jù)塊的第一個字節(jié)前面插入一最高位為I且包含該數(shù)據(jù)塊的長度信息的字節(jié);若偽起始碼前綴出現(xiàn)的次數(shù)大于0,則于該數(shù)據(jù)塊的第一個字節(jié)前插入1-4個非0字節(jié),該1-4個非0字節(jié)記錄第一個偽起始碼的位置信息;以及 偽起始碼前綴修改模組,根據(jù)預定的修改規(guī)則修改每個偽起始碼前綴所包含的三個字節(jié)的值,將當前偽起始碼前綴所包含的三個字節(jié)的值修改為包含下一個偽起始碼前綴或真起始碼前綴位置信息的值,且修改后的該當前偽起始碼前綴所包含的三個字節(jié)不會和前面或后面的任何字節(jié)構成新的偽起始碼前綴; 解碼裝置至少包括 查找模組,于接收到的數(shù)據(jù)流中尋找起始碼前綴; 解析模組,解析緊跟在起始碼值之后的字節(jié); 位置獲取模組,以于解析模組的解析結果為數(shù)據(jù)塊中出現(xiàn)了偽起始碼時,根據(jù)緊跟在起始碼值后的字節(jié)獲得插入的字節(jié)數(shù),并根據(jù)插入的字節(jié)獲得第一個偽起始碼前綴的位置"[目息;以及 數(shù)據(jù)塊恢復模組,刪除緊跟在起始碼值后的插入的1-4個字節(jié),根據(jù)獲得的第一個偽起始碼前綴的位置信息獲得該第一個偽起始碼前綴所包含的三個字節(jié),并根據(jù)預定的修改規(guī)則恢復第一個偽起始碼前綴所包含的三個字節(jié)的值,同時獲得下一個偽起始碼前綴或真起始碼前綴的位置信息,依次類推直到出現(xiàn)真起始碼前綴,獲得最終的數(shù)據(jù)塊,同時,該數(shù)據(jù)塊恢復模組于解析模組的解析結果為數(shù)據(jù)塊中沒有出現(xiàn)偽起始碼時,根據(jù)緊跟在起始碼值之后的字節(jié)中包含的數(shù)據(jù)塊長度信息獲得下一個起始碼,去掉緊跟在起始碼值之后的字節(jié),獲取其下一個字節(jié)到下一個起始碼之間的所有字節(jié)為最終所需數(shù)據(jù)塊。
12.如權利要求11所述的一種自動快速防止偽起始碼的系統(tǒng),其特征在于 該插入字節(jié)處理模組于該偽起始碼前綴出現(xiàn)的次數(shù)大于0時,將該第一個偽起始碼前綴的位置信息表示成((v3*255+v2) *255+vl) *31+v0的形式,并根據(jù)v3、v2、vl及vO的數(shù)值情況確定所需插入的字節(jié)數(shù),再根據(jù)確定的所需插入的字節(jié)數(shù)在該數(shù)據(jù)塊的第一個字節(jié)前插入相應字節(jié)數(shù)的記錄第一個偽起始碼的位置信息的非0字節(jié)。
13.如權利要求11所述的一種自動快速防止偽起始碼的系統(tǒng),其特征在于,該修改規(guī)則為 對于最后一個偽起始碼前綴,將其所包含的三個字節(jié)的值修改為包含下一個真起始碼前綴位置信息的值,且修改后的該當前偽起始碼前綴所包含的三個字節(jié)不會和前面或后面的任何字節(jié)構成新的偽起始碼前綴; 對于非最后一個偽起始碼前綴,將其所包含的三個字節(jié)的值修改為包含下一個偽起始碼前綴位置信息的值,且修改后的該當前偽起始碼前綴所包含的三個字節(jié)不會和前面或后面的任何字節(jié)構成新的偽起始碼前綴。
全文摘要
本發(fā)明公開一種自動快速防止偽起始碼的方法及系統(tǒng),該系統(tǒng)包括編碼端與解碼端,其中編碼端包括記錄模組、判斷模組、插入字節(jié)處理模組以及偽起始碼前綴修改模組;解碼端包括查找模組、解析模組、位置獲取模組以及數(shù)據(jù)塊恢復模組,編碼端通過記錄偽起始碼前綴出現(xiàn)的次數(shù)和位置,并根據(jù)相應規(guī)則于數(shù)據(jù)塊第1個字節(jié)前插入1-4個非0字節(jié)形成新的數(shù)據(jù)塊,使所形成的新的數(shù)據(jù)塊中不會存在偽起始碼前綴,解碼端再通過相應的規(guī)則恢復所需數(shù)據(jù)塊,本發(fā)明使得解碼端處理過程中,不需要在每個字節(jié)對齊位置判斷是否出現(xiàn)了插入的數(shù)據(jù)或起始碼,極大地降低了解碼端處理過程的計算量。
文檔編號H04N21/845GK102802023SQ20121031258
公開日2012年11月28日 申請日期2012年8月29日 優(yōu)先權日2012年8月29日
發(fā)明者趙海武 申請人:上海國茂數(shù)字技術有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
句容市| 垦利县| 上栗县| 武义县| 理塘县| 巴中市| 繁峙县| 五家渠市| 湄潭县| 古田县| 廉江市| 大足县| 资溪县| 翁牛特旗| 沅江市| 凯里市| 林州市| 花莲县| 昭苏县| 防城港市| 霞浦县| 会理县| 永川市| 长海县| 阳谷县| 谢通门县| 白城市| 平武县| 饶平县| 武穴市| 福安市| 彰化县| 清流县| 双牌县| 河津市| 巨野县| 海晏县| 绥芬河市| 南部县| 涿鹿县| 奇台县|