首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IMAPI接口中可以选择cd写入模式吗?

在IMAPI接口中可以选择cd写入模式吗?
EN

Stack Overflow用户
提问于 2011-02-02 12:18:51
回答 1查看 1.1K关注 0票数 2

我正在使用IMAPIv2在我的C#项目中刻录CD/DVD。我意识到接口是XA格式的(模式2)。我认为XA格式主要用于ISO。关于网络上的IMAPIv2的许多例子使用了以下方法来演示总的磁盘空间和空闲空间:

代码语言:javascript
复制
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;

不幸的是,如果我用上面描述的TotalSectorsOnMedia乘以2048 *,我将无法获得正确的总磁盘容量。当我用IMAPIv2烧录一个容量为800 MB的磁盘时,上面的代码将显示我的磁盘容量大约在650 MB左右。当我用其他软件燃烧器检查磁盘时,我看到模式被设置为XA。是否可以在燃烧前设置此模式?此外,如果有以模式1编写的会话,我将如何解决确定磁盘空闲空间的问题?是否有可能知道光盘是以哪种方式写的?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-11-13 15:22:04

为了获得总磁盘容量,您需要将扇区的数量乘以每个扇区上用户数据字段的长度(在CD/XA (eXtended体系结构)模式2上,该模式的长度为2336字节,而不是2048年)。

CD上的扇区保存2048字节的用户数据,留下304字节用于其他目的.每个数据扇区都以一个16字节的头开头:

  • 12字节同步字段(00 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接口中使用IRawCDImageTrackInfo方法。

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

代码语言:javascript
复制
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数据是按下光盘媒体中最常见的数据格式.此数据类型还提供了标准扇区类型中最大级别的ECC/EDC。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM0,每个扇区/帧的用户数据有2336字节。所有模式2扇区类型也被称为“CD”模式,它允许在单个光盘上混合音频和数据轨道。这种扇区类型也被称为模式2“无形式”,被认为是废弃的,而且很少使用。
  • 具有这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM1,每个扇区/帧的用户数据有2048字节。所有模式2扇区类型也被称为“CD”模式,它允许在单个光盘上混合音频和数据轨道。
  • 对于这种扇区类型的IMAPI_CD_SECTOR_MODE2FORM2,每个扇区/帧的用户数据有2336字节,其中最后四个字节是可选的CRC代码(如果不使用则为零)。所有模式2扇区类型也被称为“CD”模式,它允许在单个光盘上混合音频和数据轨道。这种扇区类型在编写VideoCD光盘时最常用。
  • 具有这种扇区类型的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)扇区(模式2形式0、模式2表单1和模式2表单2)可以在单个磁盘映像中混合,即使这样,也只能与其他模式2 (XA)扇区类型混合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4874374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档