Можно ли выбрать режим записи CD в интерфейсе IMAPI? - PullRequest
2 голосов
/ 02 февраля 2011

Я использую 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 Ответ

0 голосов
/ 13 ноября 2013

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


Сектор на CD-ROM содержит 2048 байтов пользовательских данных, оставляя 304 байта для других целей.Каждый сектор данных начинается с 16-байтового заголовка:

  • 12-байтовое поле синхронизации (00 ff ff 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.Только три сектора Mode2 (XA) (Форма 2 в Режиме 2, Форма 1 в Режиме 2 и Форма 2 в Режиме 2) могут быть смешаны в одном образе диска, и даже тогда, только с другими типами секторов в Режиме 2 (XA).

...