赞助论坛
  • 5599阅读
  • 0回复

影碟机Search的流程说明 [复制链接]

楼层直达
humu200  
发帖
82
精华
0
金币
467
威望
5
贡献
2
好评
2
注册
2008-01-05
楼主    humu200 发表于: 2008-07-24 23:35:49 
前言:在Search过程中,主要涉及到的问题是Search(搜索) 和Match(匹配),其目的就是能够准确地给光头定位。如果匹配才算是成功的?要跳转多少个Track(信迹)才能到目的位置,以及这些跳转指令又是如何?等等诸如此类的问题都将该文档中有详细的解释说明。在koala这个项目中,当 Servo不在做顺序读取,而因为某些特定目的要求需要做跳转读取,这时就需要用到Search功能,快速跳转至指定位置读取数据。比如说歌曲跳转,当播放完前一首歌时,开始播放下一首歌时,必须快速将光头移至该首歌的开始数据位置,但因为前后两首歌的数据地址可能不是连续的,这就需要根据前后两首歌的地址差值进行Search动作。基本概念: 1.信迹的概念:有关光盘的物理格式在前面的《关于TOC的读取流程》文档中有详细的描述,在此就不一一讲解。但在search过程中涉及到一个问题——track jump,在该个命令中track的含义是什么?它不同于通常意义上的track,即信道,或者是一首歌,而是代表一个信迹。在光盘的信号面大约布满了33800圈,宽约0.5um,间距约为1.6um的螺旋纹状的信迹(凹坑-平台序列),也可以把信迹理解为光盘上的一个逻辑圈。这些信迹分为三部分,分别位于导入区,节目区和导出区,而在节目区大约有31500条信迹,组成最多99个信道。所以说信道是由多个信迹组成,而信迹又是由扇区组成,其长度不固定。 2.Q通道各数据域含义:由于我们在search过程中,位置信息是非常重要的,且光头定位时用到的是绝对地址信息,但是不能使用相对地址信息来做Search过程。而这些位置信息就是从Q通道中取得。此外Q通道还提供了时间显示信息。下面图示Q通道在节目区的结构及各位域代表的意义,它同导入区中的数据含义有所不同,主要区别体现在相对地址和绝对地址两个域中: 1扇区98位Q通道数据 S0(1 bit) S1(1 bit) 控制码(4bit) 地址(4bit) 数据(72 bit) CRC校验(16 bit) 控制码 音乐轨迹 索引 相对地址 全部 绝对地址地址 8bit 号(8位) 8位 分(8位) 秒(8位) 帧(8位) 为0 分8bit 秒8bit 帧8bit Cntr/ADR TNO point Rmin Rsec Rframe zero Pmin Psec Pframe 10字节Q通道数据下面解释各位域的含义,其中Cntr/ADR,Point,Zero在文档《关于TOC的读取流程》里有作详细的解释,而TNO,相对地址,绝对地址这几个位域跟在读TOC时所表示的含义有所不同,其定义如下: 1) TNO域:音乐轨迹号,即信道号。在读导入区数据时,该域一定为0;否则在其它数据区中,比如读文件系统或播放过程中。就不为0时,如果是音频音乐,则表示歌曲的序号值(track),而如果是数字音乐,则表示的是Session序号。 2) 绝对地址:(1)在导入区,在地址信息表示的含义在文档《关于TOC的读取流程》中有做详细的描述。(2)该地址信息表示的是该扇区位于整个光盘从节目区起始位置到目前位置所经历的时间长度。当为多个Session时,这个起始位置的值为第一个Session节目区的起始地址。 3) 相对地址:(1)在导入区,该地址表示的是光头在光盘中的绝对地址信息,而不是相对地址,它可以表示出光头在光盘导入区中的绝对位置信息。但光盘中第一个 Session的绝对地址信息中有一个明显的特征区别。为了区别光盘中第一个Session有没有Close,我们在该域地址信息的赋值是不同的。如果没有Close,该地址信息是一个接近于光盘最大地址值(min:sec:frame = 99:59:74)的值,如果已经Close,则该值表示的是相对光盘导入区开始地址的距离。至于其中的原因有解释如下。(2)在节目区,相对地址表示的是歌曲已经进行了的时间。这就是我们在match 时有些时候用相对地址域的地址,而有些时候使用绝对地址域中的地址。其区别在于系统在读导入区的数据还是在读节目区中的数据。当我们在刻录光盘时,很多因素都会对Q通道中的数据产生影响,这就需要程序做出不同的处理。其影响作用主要体现在TOC的读取过程中,下图表示的是一张MultiSession光盘所有数据信息: Session 1 Session 2 ……… 导入区 节目区 导出区 导入区 节目区 导出区 。。 TOC 数据区 FAT TOC 数据区 FAT TOC a b c d e A B C D 地址a:读完第一个Session中TOC信息时光头所在的地址;地址b:整个光盘绝对地址的起始定位地址,也就是第一个Session节目区的起始地址。地址c:由target保存的第二个 Session的起始地址;地址d:读完第二个Session中TOC信息时光头所在的地址地址e:由target保存的第三个 Session的起始地址;如果说一张光盘只有一个Session,并且刻录完之后执行了Close动作,那么此时该地址信息几乎没有多大用处,因为在读TOC时不需要做任何的Search动作。而如果光盘有多个Session时,因为绝对地址是相对于第一个Session中的节目区起始地址开始定位的,所以当我们利用绝对时间在做从第一个Session跳转到第二个Session的Search功能时,从光头位置a到第一个节目区开始位置b无从计算,这就是光盘为什么要这里作出不同的定义,那么此时需要跳转的距离为(A+B)。而当从第二个Session往后面的Session跳转时,由于他们的绝对地址信息都是相对于同一个起始地址(第一个Session节目区的起始地址)进行定位的。所以这时我们可以直接由两个点d和e的绝对地址的差值得到它们之间需要跳转的距离(D-C)。程序基本设计思想: 在一般的光盘读取播放过程中,主要有两中情况下需要用到Search功能,一是读mutilsession的TOC信息;另一种是歌曲播放时读取数据。前一种情况只有在第二个Session几以后才会调用到 Search;后一种情况是发生在当歌曲跳转等诸如需要光头重定位时。 在调用auto search中的Jump指令时,跳转一个track就是一个信迹,而信迹又是由一个或多个扇区组成的,帧又组成扇区,所以我们在做跳转的时候,可先计算两点时间的距离,结构是以帧为单位。然后通过帧与信迹之间的关系,只能大致估算出需要跳转的信迹数,就可以知道需要调用哪个jump指令了。 在开始Search之前,必须记录要跳转的目标地址Target,接着就是读取当前扇区的SUBQ信息,这是因为它包含了我们所需要的当前地址信息,比较该地址与目标地址,计算出我们需要跳转的Track数,然后调用Auto Sequence中的Jump命令驱动光头移动至目标地址,由于不可能一次就精确地移至目标地址,这就需要反复的比较当前地址与目标地址,计算并调用jump命令,直至当前地址非常接近于目标地址。这个接近值是一个区间,只有在这个范围内才被认为是Search成功。前面两种情况下的区间值是不同的,后一种要求更为严格一点,因为在播放过程中微小的数据冗余都会影响到听觉效果,而在读TOC时,当读到重复SUBQ信息时可跳过处理。