IMAPI界面可以选择刻录模式吗?

Posted

技术标签:

【中文标题】IMAPI界面可以选择刻录模式吗?【英文标题】:Is it possible to choose cd-writing mode in IMAPI interface? 【发布时间】:2011-06-19 22:48:35 【问题描述】:

我正在使用 IMAPIv2 在我的 C# 项目中刻录 CD/DVD。我意识到接口以 XA 格式(模式 2)烧录。我相信 XA 格式主要用于 ISO。网上很多关于IMAPIv2的例子都是用下面的方法来展示总磁盘空间和可用空间:

discFormatData.Recorder = discRecorder;
IMAPI_MEDIA_PHYSICAL_TYPE mediaType = discFormatData.CurrentPhysicalMediaType;
this.MediaType = GetMediaTypeString(mediaType);
fileSystemImage = new MsftFileSystemImage();
fileSystemImage.ChooseImageDefaultsForMediaType(mediaType);
MediaStateString = GetMediaStatus(discFormatData.CurrentMediaStatus);
if (discFormatData.MediaHeuristicallyBlank) MediaStateString = "Blank";

Int64 freeMediaBlocks = discFormatData.FreeSectorsOnMedia;
this.TotalDiscCapacity = 2048 * freeMediaBlocks;
Int64 userMediaBlocks = discFormatData.TotalSectorsOnMedia - discFormatData.FreeSectorsOnMedia;
this.TotalUsedDiscSpace = 2048 * userMediaBlocks;

不幸的是,如果我如上所述将 2048 * 与 TotalSectorsOnMedia 相乘,我将无法获得正确的总磁盘容量。当我使用 IMAPIv2 刻录 800 MB 容量的光盘时,上面的代码将显示我的光盘容量大约为 650 MB。当我用其他软件刻录机检查光盘时,我看到模式设置为 XA。是否可以在刻录前设置此模式?另外,如果有以模式 1 写入的会话,我将如何解决确定磁盘可用空间的问题?是否可以学习光盘的写入模式?

谢谢。

【问题讨论】:

磁盘空白供应商总是给你乐观的数字,未格式化的大小。 650 MB 是格式化 CD-Rom 的正常大小。 我正在使用的光盘容量为 800mb,其他刻录程序看到这个值。 @MP: 我正在写一个 cd 刻录程序 :-) 【参考方案1】:

为了获得总磁盘容量,您需要将扇区数乘以每个扇区上的用户数据字段的长度(在 CD-ROM/XA(扩展架构)模式 2 上为 2336 字节,而不是2048)


CD-ROM 上的一个扇区保存 2048 字节的用户数据,剩下的 304 字节用于其他用途。每个数据扇区都以一个 16 字节的头开始:

12字节同步字段(00 ff ff ff ff ff ff ff ff ff 00) 3 字节地址(分、秒、小数(1/75)秒) 1 字节模式

模式字节决定扇区中剩余的 2336 个字节的样子:

模式0:空数据;对 CD 录制没有实际用途 模式 1:典型的 CD-ROM 布局 2048 字节的用户数据 4 字节 EDC(错误检测码,32 位 CRC) 8 字节的保留空间,设置为零 172 字节的“P”奇偶校验 104 字节的“Q”奇偶校验 模式2:2336字节的用户数据,通常用于CD-ROM/XA

为了检索为一个磁道中的扇区提供的数据类型,您可以使用IRawCDImageTrackInfo 接口中的get_SectorType 方法。

可能的扇区类型由IMAPI_CD_SECTOR_TYPE 枚举定义:

typedef enum   
 IMAPI_CD_SECTOR_AUDIO          = 0x00,
 IMAPI_CD_SECTOR_MODE_ZERO      = 0x01,
 IMAPI_CD_SECTOR_MODE1          = 0x02,
 IMAPI_CD_SECTOR_MODE2FORM0     = 0x03,
 IMAPI_CD_SECTOR_MODE2FORM1     = 0x04,
 IMAPI_CD_SECTOR_MODE2FORM2     = 0x05,
 IMAPI_CD_SECTOR_MODE1RAW       = 0x06,
 IMAPI_CD_SECTOR_MODE2FORM0RAW  = 0x07,
 IMAPI_CD_SECTOR_MODE2FORM1RAW  = 0x08,
 IMAPI_CD_SECTOR_MODE2FORM2RAW  = 0x09
 IMAPI_CD_SECTOR_TYPE;
IMAPI_CD_SECTOR_AUDIO 对于这种扇区类型,音频数据每扇区/帧有 2352 字节。这可以分解为 588 个连续样本,每个样本为 4 个字节。单个样本的布局与 16 位立体声 44.1KHz WAV 文件数据相匹配。这种类型的扇区没有额外的纠错码。 IMAPI_CD_SECTOR_MODE_ZERO 对于这种扇区类型,用户数据每扇区/帧有 2336 个字节。这种很少使用的扇区类型包含全零数据,并且在当今的媒体中几乎从未见过。 IMAPI_CD_SECTOR_MODE1 对于这种扇区类型,用户数据每扇区/帧有 2048 个字节。 Mode1 数据是压制 CD-ROM 媒体最常见的数据形式。此数据类型还提供标准扇区类型中***别的 ECC/EDC。 IMAPI_CD_SECTOR_MODE2FORM0 对于这种扇区类型,用户数据每扇区/帧有 2336 个字节。所有模式 2 扇区类型也称为“CD-ROM XA”模式,它允许在一张光盘上混合音频和数据轨道。这种扇区类型也称为模式 2“无形”,被认为已弃用,并且很少使用。 IMAPI_CD_SECTOR_MODE2FORM1 对于这种扇区类型,用户数据每扇区/帧有 2048 个字节。所有模式 2 扇区类型也称为“CD-ROM XA”模式,允许在一张光盘上混合音频和数据轨道。 IMAPI_CD_SECTOR_MODE2FORM2 对于这种扇区类型,用户数据每个扇区/帧有 2336 个字节,其中最后四个字节是可选的 CRC 码(如果不使用,则为零)。所有模式 2 扇区类型也称为“CD-ROM XA”模式,它允许在一张光盘上混合音频和数据轨道。这种扇区类型最常用于刻录 VCD 光盘。 IMAPI_CD_SECTOR_MODE1RAW 对于这种扇区类型,用户数据每扇区/帧有 2352 个字节。这是经过预处理的 Mode1Cooked 数据扇区,已将扇区头、ECC/EDC 和加扰添加到数据流中。 IMAPI_CD_SECTOR_MODE2FORM0RAW 对于这种扇区类型,用户数据每扇区/帧有 2352 个字节。这是经过预处理的 Mode2Form0 数据扇区,已将扇区头、ECC/EDC 和加扰添加到数据流中。 IMAPI_CD_SECTOR_MODE2FORM1RAW 对于这种扇区类型,用户数据每扇区/帧有 2352 个字节。这是经过预处理的 Mode2Form1 数据扇区,已将扇区头、ECC/EDC 和加扰添加到数据流中。 IMAPI_CD_SECTOR_MODE2FORM2RAW 对于这种扇区类型,用户数据每扇区/帧有 2352 个字节。这是经过预处理的 Mode2Form2 数据扇区,已将扇区头、ECC/EDC 和加扰添加到数据流中。

备注: 某些扇区类型与单个图像中的其他扇区类型不兼容。以下是这种情况的典型示例: 如果第一个轨道是音频,那么所有轨道都必须是音频。 如果第一个轨道是 Mode1,那么所有轨道都必须是 Mode1。 只有三个 Mode2 (XA) 扇区(Mode 2 Form 0、Mode 2 Form 1 和 Mode 2 Form 2)可以混合在单个光盘映像中,即使这样,也只能与其他 Mode 2 (XA) 扇区类型混合。

【讨论】:

以上是关于IMAPI界面可以选择刻录模式吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 IMAPI2 检索和设置刻录速度?

IMAPI2 如何刻录已经创建的iso

在磁盘中创建一个文件夹并使用 IMAPI 2 刻录到它

使用 ICDBurn 刻录 CD

如何使用 IMAPI 异步写入 CD/DVD?

空白 DVD/蓝光光盘 (IMAPI) 上的可用空间