專利名稱:一種光盤容錯處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種光盤容錯處理方法,該方法特別適用于高清DVD光盤(容量從單面 單層的4.7GB到單面雙層的9GB)。
背景技術(shù):
在這個高速發(fā)展的社會,通過DVD碟片觀看電影已經(jīng)成為人們?nèi)粘I畹囊徊?分,而播放質(zhì)量的優(yōu)劣則決定著高清DVD的發(fā)展方向。DVD碟片是移動存儲設(shè)備, 片的表面沒有任何保護,因此在多次使用過程中,難免會出現(xiàn)劃傷或沾染上雜物質(zhì) 情況,這些小毛病都會導致光盤(即DVD碟片)出現(xiàn)壞塊,影響數(shù)據(jù)的讀取。讀光 盤錯誤的表現(xiàn)形式各不相同,對于存儲著高清視頻的DVD光盤而言,讀光盤錯誤表 現(xiàn)為出現(xiàn)馬賽克或者電影卡頓等音視頻播放不暢的現(xiàn)象,這嚴重影響了用戶對于優(yōu) 質(zhì)影片的欣賞。因此在讀取光盤時需要進行容錯處理。
目前,容錯處理主要有硬件容錯處理和軟件容錯處理兩個方面。硬件上常用的 方法是"人工智能糾錯(AIEC) " 。 AIEC通過對上萬張光盤的采樣測試,"記錄" 下適合他們的讀盤策略,并保存在光驅(qū)BIOS芯片中,以方便光驅(qū)針對偏心盤、低反 射盤、劃傷盤進行自動的讀盤策略的選擇。但是,這種硬件容錯處理方法成本高昂, 實現(xiàn)復雜。
而軟件容錯處理是采用從應(yīng)用程序?qū)哟螌獗P的錯誤進行相應(yīng)的處理,或者是 通過一定應(yīng)用層次的校驗機制進行處理。但是,應(yīng)用程序?qū)哟蔚娜蒎e處理通用性不 高,對不同的播放軟件往往需要專門編寫不同的容錯應(yīng)用程序,極大地限制了其適 用范圍。而對于基于校驗機制的容錯處理,于碟片存儲數(shù)據(jù)量大和算法復雜度高, 對CPU和SDRAM有較高要求,且通用性很低。
發(fā)明內(nèi)容
本方案的目的是克服現(xiàn)有光驅(qū)在讀取光盤MPEG數(shù)據(jù)時遇到壞塊而產(chǎn)生的播放 卡頓的問題,基于驅(qū)動程序?qū)哟危峁┮环N低成本且通用性強的光盤容錯處理方法。
為實現(xiàn)上述發(fā)明目的,本發(fā)明提供的光盤容錯處理方法包括設(shè)定初次跳讀數(shù) 和最大連續(xù)讀錯誤次數(shù),驅(qū)動程序依次讀取光盤塊,如果在某一個光盤塊發(fā)生讀錯誤,則執(zhí)行下列步驟
1) 讀取從當前光盤塊起始的第N個光盤塊,所述N為所述初次跳讀數(shù);如果 讀取正常,則繼續(xù)依次讀取后續(xù)光盤塊;如果讀取錯誤,則進入步驟2);
2) 將N賦值為2N,然后讀取從當前光盤塊起始的第N個光盤塊,如果讀取正 常,則繼續(xù)依次讀取后續(xù)光盤塊;如果讀取錯誤,則進入步驟3);
3) 判斷當前連續(xù)錯誤次數(shù)是否達到所述最大連續(xù)讀錯誤次數(shù);如果判斷為是, 則退出讀光盤程序,如果判斷為否,則回到步驟2)。
上述技術(shù)方案中,所述最大連續(xù)讀錯誤次數(shù)為15。
上述技術(shù)方案中,所述步驟l)和步驟2)中,當發(fā)生讀錯誤時,驅(qū)動程序調(diào)用 結(jié)束處理函數(shù)清除當前發(fā)生讀錯誤的光盤塊所占用的緩存。
本發(fā)明基于驅(qū)動程序?qū)樱诓蛔龃蟮母膭拥那疤嵯履軌驅(qū)崿F(xiàn)光盤容錯。相對于 硬件容錯,本發(fā)明成本低,實現(xiàn)簡單,時間短;而相對于其它從軟件上解決的辦法, 本發(fā)明不需要專門編寫新的應(yīng)用程序,機制簡單,不需要復雜的校驗機制,只需要 在原有驅(qū)動程序的基礎(chǔ)上稍作調(diào)整即可;同時,本發(fā)明也具有更大通用性,可以應(yīng) 用在不同的平臺上。
圖1是塊設(shè)備驅(qū)動程序中關(guān)于讀取請求的主要數(shù)據(jù)結(jié)構(gòu)關(guān)系圖。 圖2是實現(xiàn)高清DVD碟片容錯處理的軟件機制架構(gòu)示意圖。
具體實施例方式
下面結(jié)合附圖和具體實施方式
對本發(fā)明作進一步詳細描述
本實施例提供的實現(xiàn)高清DVD碟片容錯處理的實現(xiàn)方法,包括讀取請求錯誤的 判斷;在已知該次讀取請求錯誤的情況下的容錯處理機制;對讀取錯誤處理后的下 一次讀取操作處理。另外,本實施例還包括在光盤損壞比較嚴重的情況下盡早退出 的處理機制。
高清DVD碟片的讀操作是通過塊設(shè)備驅(qū)動程序?qū)崿F(xiàn)的,通常來說,這是通過將 讀請求組織成請求隊列,再對每一個請求一一進行處理的方式實現(xiàn)的。正常的讀取 請求處理過程包括三個步驟(1)檢査當前讀取請求的有效性;(2)進行實際的數(shù) 據(jù)傳送。就是用上面提到過的請求隊列的方式實現(xiàn)的。將每個請求記為request,對 應(yīng)圖1中的"讀請求結(jié)構(gòu)體",管理請求隊列的數(shù)據(jù)結(jié)構(gòu)記為request—queue,對應(yīng)圖 1中的"讀請求隊列結(jié)構(gòu)體"。請求隊列就是以request—queue為頭節(jié)點將請求queue鏈接成雙鏈表進行管理。每一個請求request又可以處理多個連續(xù)的讀操作,通過圖 1中的"緩沖區(qū)管理結(jié)構(gòu)體"進行管理,緩沖區(qū)管理結(jié)構(gòu)體記為buffer—head,而實際 的數(shù)據(jù)保存在"緩沖區(qū)"中,緩沖區(qū)記為data,詳見圖1。 (3)清除當前的請求。清 除當前的請求一般通過結(jié)束處理函數(shù)執(zhí)行。本實施例中,驅(qū)動程序向結(jié)束處理函數(shù) 傳遞一個參數(shù)來標識讀操作的正確與錯誤,在這里我們以l標識正確,O標識錯誤。 當讀錯的同時,驅(qū)動程序生成一個"I/O error"消息傳遞給操作系統(tǒng)。不同的操作系 統(tǒng)的驅(qū)動程序中可能有不同的結(jié)束處理函數(shù),清除當前的請求的處理方式也有所不 同,但應(yīng)當理解,這些清除當前的請求的處理方式都是本領(lǐng)域技術(shù)人員所公知的, 因此,這里不再一一贅述。
參照圖2,高清碟片容錯處理機制的具體處理過程如下
1) 操作系統(tǒng)在收到讀光盤命令后,在進行讀操作之前,會先進行初始化工作 Sectors = N, N是一個常量,sectors是每次讀操作失敗之后跳過的塊數(shù),在連
續(xù)讀錯的情況下,會以2的倍數(shù)遞增;
sector_end = 0, sector—end是跳塊之后下一次要讀的塊號,即有如下關(guān)系 sector—end=Current—sector + sectors , Current—sector是當前塊號,初始化為0; Error—times = 0,連續(xù)讀錯誤的次數(shù),有上限M,初始化為0;
2) 通過圖2,可以看到正確的讀操作流程圖,如果發(fā)生讀取操作錯誤,則進入 到錯誤處理的流程中去,具體的操作如下
sector—end=Current—sector + sectors,得到跳過sectors塊之后下一次要讀取的塊
號;
Error_times ++,連讀錯誤次數(shù)加1,并且要判斷是否大于最大允許的連讀錯誤 次數(shù),如果大于等于本實施例所允許的最大連續(xù)讀取錯誤次數(shù),則認為光盤數(shù)據(jù)損 壞嚴重,退出讀光驅(qū)命令;
sectors = 2X sectors,下一次仍然讀取錯誤要跳過的塊數(shù)加倍; 真正跳塊的操作是從下一次開始的sectors塊讀取操作,但不一定是sectors次循 環(huán),因為每次讀取操作是以data為單位的,而每個data會存放若干個塊的數(shù)據(jù),此 外,多次連續(xù)的讀取操作可以合并到一個讀請求中,可以參考圖l。流程圖中的"取 消該次操作"所做的工作在上面曾經(jīng)提到過的"結(jié)束處理函數(shù)"中,它定義在。"結(jié) 束處理函數(shù)"是對于讀取操作的掃尾工作,在正確的讀取操作結(jié)束之后會返回1,而 在錯誤的讀取操作之后會返回0。如果沒有錯誤處理機制,原始的驅(qū)動程序是一次處 理一個data的數(shù)據(jù),而且要等到該次讀錯誤操作返回,在底層操作中是通過時間溢 出值為0來標識的,在連續(xù)若千塊發(fā)生錯誤的情況下,每次等待都要等待時間溢出值為0,這段等待時間導致播放的畫面停頓或出現(xiàn)馬賽克等異常現(xiàn)象。
在本實施例的錯誤處理機制中,改變的是"結(jié)束處理函數(shù)"對于要跳過的塊的 處理操作,本實施例的機制就是把這些要跳過的塊當成已正確操作結(jié)束而返回1。具 體來講就是在判斷處于跳塊操作過程后,不進行任何真正的讀取操作,直接調(diào)用"結(jié) 束處理函數(shù)"來對該次的讀取請求request進行清理。在每一次讀取操作過程中,真 正所做的清理工作是對于該次請求所使用的緩沖空間的釋放。在"結(jié)束處理函數(shù)中", 本實施例要在合適的時機把該次request中所有用來存放數(shù)據(jù)的"緩沖區(qū)"data和管 理"緩沖區(qū)"data的"緩沖區(qū)管理結(jié)構(gòu)體"buffer一head處理掉,采用的方法和正確 讀取數(shù)據(jù)之后對于這些結(jié)構(gòu)體和緩沖區(qū)的處理方法是一樣的首先暫存request中bh 所指向的buffer—head結(jié)構(gòu)體對request中bh所指向的buffer—head和data調(diào)用底層 清理函數(shù)(不同的系統(tǒng)有不同的底層處理函數(shù))進行處理,之后,再以輪詢的方式 處理完所有的buffer—head和他們所管理的data,直到"讀請求"request中沒有管理 "緩沖區(qū)"data的"緩沖區(qū)管理結(jié)構(gòu)體"buffer一head為止。
3)跳過相應(yīng)的塊數(shù)之后,下一次則按照正常的讀取操作進行,直到讀到光盤最 后或者連讀錯誤次數(shù)達到上限值M。
權(quán)利要求
1、一種光盤容錯處理方法,包括設(shè)定初次跳讀數(shù)和最大連續(xù)讀錯誤次數(shù),驅(qū)動程序依次讀取光盤塊,如果在某一個光盤塊發(fā)生讀錯誤,則執(zhí)行下列步驟1)讀取從當前光盤塊起始的第N個光盤塊,所述N為所述初次跳讀數(shù);如果讀取正常,則繼續(xù)依次讀取后續(xù)光盤塊;如果讀取錯誤,則進入步驟2);2)將N賦值為2N,然后讀取從當前光盤塊起始的第N個光盤塊,如果讀取正常,則繼續(xù)依次讀取后續(xù)光盤塊;如果讀取錯誤,則進入步驟3);3)判斷當前連續(xù)錯誤次數(shù)是否達到所述最大連續(xù)讀錯誤次數(shù);如果判斷為是,則退出讀光盤程序,如果判斷為否,則回到步驟2)。
2、 根據(jù)權(quán)利要求1所述的光盤容錯處理方法,所述最大連續(xù)讀錯誤次數(shù)為15。
3、 根據(jù)權(quán)利要求1所述的光盤容錯處理方法,所述步驟1)和步驟2)中,當 發(fā)生讀錯誤時,驅(qū)動程序調(diào)用結(jié)束處理函數(shù)清除當前發(fā)生讀錯誤的光盤塊所占用的 緩存。
全文摘要
本發(fā)明涉及一種光盤容錯處理方法,包括設(shè)定初次跳讀數(shù)和最大連續(xù)讀錯誤次數(shù),驅(qū)動程序依次讀取光盤塊,如果在某一個光盤塊發(fā)生讀錯誤,執(zhí)行下列步驟1)讀取從當前光盤塊起始的第N個光盤塊,所述N為所述初次跳讀數(shù);如果讀取正常,則繼續(xù)依次讀取后續(xù)光盤塊;否則,進入步驟2);2)將N賦值為2N,然后讀取從當前光盤塊起始的第N個光盤塊,如果讀取正常,則繼續(xù)依次讀取后續(xù)光盤塊;否則,進入步驟3);3)判斷當前連續(xù)錯誤次數(shù)是否達到所述最大連續(xù)讀錯誤次數(shù);如果判斷為是,則退出讀光盤程序,否則,回到步驟2)。本發(fā)明能夠解決光驅(qū)讀取光盤MPEG數(shù)據(jù)時遇到壞塊而產(chǎn)生的播放卡頓問題,并且成本低、實現(xiàn)簡單、通用性強。
文檔編號G11B20/18GK101645291SQ20091009127
公開日2010年2月10日 申請日期2009年8月14日 優(yōu)先權(quán)日2009年8月14日
發(fā)明者姜京梅, 梁 潘, 胡建良, 曉 陳, 齊向東 申請人:北京中科智網(wǎng)傳媒技術(shù)有限公司;中國科學院聲學研究所