2011-02-02 61 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)扇區類型混合使用。

相關問題