是否可以在IMAPI界面中选择cd-writing模式?

时间:2011-02-02 12:18:51

标签: c# imapi

我正在使用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写入的会话,如何解决确定磁盘空闲空间的问题?是否可以了解光盘的写入模式?

感谢。

1 个答案:

答案 0 :(得分:0)

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


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

  • 12字节同步字段(00 ff ff ff ff ff ff ff ff ff ff ff ff)
  • 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界面中的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个连续样本,每个样本是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”模式,它允许在单个光盘上混合音频和数据轨道。在编写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)扇区类型混合。 / p>