一种光盘容错处理方法

文档序号:6755436阅读:190来源:国知局
专利名称:一种光盘容错处理方法
技术领域
本发明涉及一种光盘容错处理方法,该方法特别适用于高清DVD光盘(容量从单面 单层的4.7GB到单面双层的9GB)。
背景技术
在这个高速发展的社会,通过DVD碟片观看电影已经成为人们日常生活的一部 分,而播放质量的优劣则决定着高清DVD的发展方向。DVD碟片是移动存储设备, 片的表面没有任何保护,因此在多次使用过程中,难免会出现划伤或沾染上杂物质 情况,这些小毛病都会导致光盘(即DVD碟片)出现坏块,影响数据的读取。读光 盘错误的表现形式各不相同,对于存储着高清视频的DVD光盘而言,读光盘错误表 现为出现马赛克或者电影卡顿等音视频播放不畅的现象,这严重影响了用户对于优 质影片的欣赏。因此在读取光盘时需要进行容错处理。
目前,容错处理主要有硬件容错处理和软件容错处理两个方面。硬件上常用的 方法是"人工智能纠错(AIEC) " 。 AIEC通过对上万张光盘的采样测试,"记录" 下适合他们的读盘策略,并保存在光驱BIOS芯片中,以方便光驱针对偏心盘、低反 射盘、划伤盘进行自动的读盘策略的选择。但是,这种硬件容错处理方法成本高昂, 实现复杂。
而软件容错处理是采用从应用程序层次对光盘的错误进行相应的处理,或者是 通过一定应用层次的校验机制进行处理。但是,应用程序层次的容错处理通用性不 高,对不同的播放软件往往需要专门编写不同的容错应用程序,极大地限制了其适 用范围。而对于基于校验机制的容错处理,于碟片存储数据量大和算法复杂度高, 对CPU和SDRAM有较高要求,且通用性很低。

发明内容
本方案的目的是克服现有光驱在读取光盘MPEG数据时遇到坏块而产生的播放 卡顿的问题,基于驱动程序层次,提供一种低成本且通用性强的光盘容错处理方法。
为实现上述发明目的,本发明提供的光盘容错处理方法包括设定初次跳读数 和最大连续读错误次数,驱动程序依次读取光盘块,如果在某一个光盘块发生读错误,则执行下列步骤
1) 读取从当前光盘块起始的第N个光盘块,所述N为所述初次跳读数;如果 读取正常,则继续依次读取后续光盘块;如果读取错误,则进入步骤2);
2) 将N赋值为2N,然后读取从当前光盘块起始的第N个光盘块,如果读取正 常,则继续依次读取后续光盘块;如果读取错误,则进入步骤3);
3) 判断当前连续错误次数是否达到所述最大连续读错误次数;如果判断为是, 则退出读光盘程序,如果判断为否,则回到步骤2)。
上述技术方案中,所述最大连续读错误次数为15。
上述技术方案中,所述步骤l)和步骤2)中,当发生读错误时,驱动程序调用 结束处理函数清除当前发生读错误的光盘块所占用的缓存。
本发明基于驱动程序层,在不做大的改动的前提下能够实现光盘容错。相对于 硬件容错,本发明成本低,实现简单,时间短;而相对于其它从软件上解决的办法, 本发明不需要专门编写新的应用程序,机制简单,不需要复杂的校验机制,只需要 在原有驱动程序的基础上稍作调整即可;同时,本发明也具有更大通用性,可以应 用在不同的平台上。


图1是块设备驱动程序中关于读取请求的主要数据结构关系图。 图2是实现高清DVD碟片容错处理的软件机制架构示意图。
具体实施例方式
下面结合附图和具体实施方式
对本发明作进一步详细描述
本实施例提供的实现高清DVD碟片容错处理的实现方法,包括读取请求错误的 判断;在已知该次读取请求错误的情况下的容错处理机制;对读取错误处理后的下 一次读取操作处理。另外,本实施例还包括在光盘损坏比较严重的情况下尽早退出 的处理机制。
高清DVD碟片的读操作是通过块设备驱动程序实现的,通常来说,这是通过将 读请求组织成请求队列,再对每一个请求一一进行处理的方式实现的。正常的读取 请求处理过程包括三个步骤(1)检査当前读取请求的有效性;(2)进行实际的数 据传送。就是用上面提到过的请求队列的方式实现的。将每个请求记为request,对 应图1中的"读请求结构体",管理请求队列的数据结构记为request—queue,对应图 1中的"读请求队列结构体"。请求队列就是以request—queue为头节点将请求queue链接成双链表进行管理。每一个请求request又可以处理多个连续的读操作,通过图 1中的"缓冲区管理结构体"进行管理,缓冲区管理结构体记为buffer—head,而实际 的数据保存在"缓冲区"中,缓冲区记为data,详见图1。 (3)清除当前的请求。清 除当前的请求一般通过结束处理函数执行。本实施例中,驱动程序向结束处理函数 传递一个参数来标识读操作的正确与错误,在这里我们以l标识正确,O标识错误。 当读错的同时,驱动程序生成一个"I/O error"消息传递给操作系统。不同的操作系 统的驱动程序中可能有不同的结束处理函数,清除当前的请求的处理方式也有所不 同,但应当理解,这些清除当前的请求的处理方式都是本领域技术人员所公知的, 因此,这里不再一一赘述。
参照图2,高清碟片容错处理机制的具体处理过程如下
1) 操作系统在收到读光盘命令后,在进行读操作之前,会先进行初始化工作 Sectors = N, N是一个常量,sectors是每次读操作失败之后跳过的块数,在连
续读错的情况下,会以2的倍数递增;
sector_end = 0, sector—end是跳块之后下一次要读的块号,即有如下关系 sector—end=Current—sector + sectors , Current—sector是当前块号,初始化为0; Error—times = 0,连续读错误的次数,有上限M,初始化为0;
2) 通过图2,可以看到正确的读操作流程图,如果发生读取操作错误,则进入 到错误处理的流程中去,具体的操作如下
sector—end=Current—sector + sectors,得到跳过sectors块之后下一次要读取的块
号;
Error_times ++,连读错误次数加1,并且要判断是否大于最大允许的连读错误 次数,如果大于等于本实施例所允许的最大连续读取错误次数,则认为光盘数据损 坏严重,退出读光驱命令;
sectors = 2X sectors,下一次仍然读取错误要跳过的块数加倍; 真正跳块的操作是从下一次开始的sectors块读取操作,但不一定是sectors次循 环,因为每次读取操作是以data为单位的,而每个data会存放若干个块的数据,此 外,多次连续的读取操作可以合并到一个读请求中,可以参考图l。流程图中的"取 消该次操作"所做的工作在上面曾经提到过的"结束处理函数"中,它定义在。"结 束处理函数"是对于读取操作的扫尾工作,在正确的读取操作结束之后会返回1,而 在错误的读取操作之后会返回0。如果没有错误处理机制,原始的驱动程序是一次处 理一个data的数据,而且要等到该次读错误操作返回,在底层操作中是通过时间溢 出值为0来标识的,在连续若千块发生错误的情况下,每次等待都要等待时间溢出值为0,这段等待时间导致播放的画面停顿或出现马赛克等异常现象。
在本实施例的错误处理机制中,改变的是"结束处理函数"对于要跳过的块的 处理操作,本实施例的机制就是把这些要跳过的块当成已正确操作结束而返回1。具 体来讲就是在判断处于跳块操作过程后,不进行任何真正的读取操作,直接调用"结 束处理函数"来对该次的读取请求request进行清理。在每一次读取操作过程中,真 正所做的清理工作是对于该次请求所使用的缓冲空间的释放。在"结束处理函数中", 本实施例要在合适的时机把该次request中所有用来存放数据的"缓冲区"data和管 理"缓冲区"data的"缓冲区管理结构体"buffer一head处理掉,采用的方法和正确 读取数据之后对于这些结构体和缓冲区的处理方法是一样的首先暂存request中bh 所指向的buffer—head结构体对request中bh所指向的buffer—head和data调用底层 清理函数(不同的系统有不同的底层处理函数)进行处理,之后,再以轮询的方式 处理完所有的buffer—head和他们所管理的data,直到"读请求"request中没有管理 "缓冲区"data的"缓冲区管理结构体"buffer一head为止。
3)跳过相应的块数之后,下一次则按照正常的读取操作进行,直到读到光盘最 后或者连读错误次数达到上限值M。
权利要求
1、一种光盘容错处理方法,包括设定初次跳读数和最大连续读错误次数,驱动程序依次读取光盘块,如果在某一个光盘块发生读错误,则执行下列步骤1)读取从当前光盘块起始的第N个光盘块,所述N为所述初次跳读数;如果读取正常,则继续依次读取后续光盘块;如果读取错误,则进入步骤2);2)将N赋值为2N,然后读取从当前光盘块起始的第N个光盘块,如果读取正常,则继续依次读取后续光盘块;如果读取错误,则进入步骤3);3)判断当前连续错误次数是否达到所述最大连续读错误次数;如果判断为是,则退出读光盘程序,如果判断为否,则回到步骤2)。
2、 根据权利要求1所述的光盘容错处理方法,所述最大连续读错误次数为15。
3、 根据权利要求1所述的光盘容错处理方法,所述步骤1)和步骤2)中,当 发生读错误时,驱动程序调用结束处理函数清除当前发生读错误的光盘块所占用的 缓存。
全文摘要
本发明涉及一种光盘容错处理方法,包括设定初次跳读数和最大连续读错误次数,驱动程序依次读取光盘块,如果在某一个光盘块发生读错误,执行下列步骤1)读取从当前光盘块起始的第N个光盘块,所述N为所述初次跳读数;如果读取正常,则继续依次读取后续光盘块;否则,进入步骤2);2)将N赋值为2N,然后读取从当前光盘块起始的第N个光盘块,如果读取正常,则继续依次读取后续光盘块;否则,进入步骤3);3)判断当前连续错误次数是否达到所述最大连续读错误次数;如果判断为是,则退出读光盘程序,否则,回到步骤2)。本发明能够解决光驱读取光盘MPEG数据时遇到坏块而产生的播放卡顿问题,并且成本低、实现简单、通用性强。
文档编号G11B20/18GK101645291SQ20091009127
公开日2010年2月10日 申请日期2009年8月14日 优先权日2009年8月14日
发明者姜京梅, 梁 潘, 胡建良, 晓 陈, 齐向东 申请人:北京中科智网传媒技术有限公司;中国科学院声学研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1