Можно ли выбрать режим записи CD в интерфейсе IMAPI?

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

Благодарю.

1 ответ

Чтобы получить общую емкость диска, вам нужно умножить количество секторов на длину поля пользовательских данных в каждом секторе (которое в режиме 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 из интерфейса 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 байтов на сектор / кадр. Данные Mode 1 - наиболее распространенная форма данных для прессованных носителей 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 в Режиме 2, Форма 1 в Режиме 2 и Форма 2 в Режиме 2) могут быть смешаны в одном образе диска, и даже тогда, только с другими типами секторов в Режиме 2 (XA).

Другие вопросы по тегам