Можно ли выбрать режим записи 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).