2011-02-02 2 views
2

Я использую IMAPIv2 для записи CD/DVD в моем проекте C#. Я понял, что интерфейс горит в XA-формате (режим 2). Я считаю, что XA-формат в основном используется для ISO. Много примеров о IMAPIv2 в Интернете использует следующий метод, чтобы продемонстрировать общее дисковое пространство и свободное пространство:Можно ли выбрать режим записи cd в интерфейсе IMAPI?

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, как описано выше, я не получу правильную Общую емкость диска , Когда я записываю диск с емкостью 800 Мбайт с IMAPIv2, тогда приведенный выше код покажет, что емкость моего диска составляет около 650 МБ. Когда я проверяю диск с другими программными горелками, я вижу, что в этом режиме установлен XA. Можно ли установить этот режим перед записью? Кроме того, как я могу решить проблему определения свободного места на диске, если есть сеансы, написанные в режиме 1? Можно ли узнать, в каком режиме записывается диск?

Спасибо.

+0

Производитель пустого диска всегда дает вам оптимистичное число, неформатированный размер. 650 МБ - это нормальный размер отформатированного CD-Rom. –

+0

Диск, с которым я работаю, обладает емкостью 800 Мб и другими программами для горения. –

+0

@MP: Я пишу программу для записи компакт-дисков :-) –

ответ

0

Чтобы получить общую емкость диска, необходимо умножить количество секторов на длину поля пользовательских данных в каждом секторе (что на CD-ROM/XA (eXtended Architecture) режим 2 будет 2336 байт вместо 2048)


сектор на компакт-диске занимает 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 от 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-битным стереофайлам с данными WAV с частотой 44,1 кГц. Этот тип сектора не имеет дополнительных кодов для исправления ошибок.
  • 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).

Смежные вопросы