2011-02-02 35 views
2

我正在使用IMAPIv2在C#项目中刻录CD/DVD。我意识到界面以XA格式(模式2)燃烧。我相信XA格式主要用于ISO。很多关于现在IMAPIv2在网络上的例子使用下面的方法来证明总的磁盘空间和可用空间:是否可以在IMAPI界面中选择cd写入模式?

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写入,我将如何解决确定磁盘剩余空间的问题?是否有可能学习光盘写入哪种模式?

谢谢。

+0

磁盘空白供应商总是给你乐观的数字,未格式化的大小。 650 MB是格式化CD-Rom的正常大小。 – 2011-02-02 12:50:19

回答

0

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


CD-ROM上的一个扇区保存2048字节的用户数据,其余目的为304字节。每一个数据扇区开始于一个16字节的标头:

  • 12字节的同步字段(00 FF 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

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

可能的扇区类型由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个连续的样本,每个样本是四个字节。单个样本的布局匹配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”模式,它允许在单个光盘上混合音频和数据轨道。在刻录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。 只有三个模式2(XA)扇区(模式2模式0,模式2模式1和模式2模式2)可以在一张光盘镜像中混合使用,即使如此,也只能与其他模式2(XA)扇区类型混合使用。

相关问题