在XA光盘上区分模式2形式1和模式2形式2 ?

2022-01-21 11:24:16 标签 cd-romiso9660

我正在开发一个用于读取cd - rom和ISO9660文件系统的库。

长话短说,几乎所有的东西都是有效的,除了一件事,我很难弄清楚它是如何做到的:

XA标准在哪里定义模式2形式1和模式2形式2的区别?

目前我使用下面的伪代码来区分这两种形式;尽管这是一种天真的启发式,但它确实有效,但远非理想:

var buffer = ... // this is a raw sector of 2352 bytes
var m2F1   = ISector.Cast<SectorMode2Form1>(buffer);
var edc1   = EdcHelper.ComputeBlock(0, buffer, 16, 2056);
var edc2   = BitConverter.ToUInt32(m2F1.Edc, 0);
var isM2F1 = edc1 == edc2;
if (isM2F1) return CdRomSectorMode.Mode2Form1;
// NOTE we cannot reliably check EDC of M2F2 since it's optional
var isForm2 =
    m2F1.SubHeaderCopy1.SubMode.HasFlag(SectorMode2Form1SubHeaderSubMode.Form2) &&
    m2F1.SubHeaderCopy2.SubMode.HasFlag(SectorMode2Form1SubHeaderSubMode.Form2);
if (isForm2) return CdRomSectorMode.Mode2Form2;
return CdRomSectorMode.Mode2Formless;

如果你看一些软件,如IsoBuster,它似乎是一个轨道级的属性,但我无法理解值将从轨道中读取。

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码