2

C# プロジェクトで IMAPIv2 を使用して CD/DVD を作成しています。インターフェイスが XA 形式 (モード 2) で焼き付けられることに気付きました。XA 形式は主に ISO に使用されると思います。Web 上の 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;

残念ながら、上記のように TotalSectorsOnMedia で 2048 * を掛けると、正しい総ディスク容量が得られません。IMAPIv2 で容量 800 MB のディスクを書き込むと、上記のコードはディスク容量が約 650 MB であることを示します。他のソフトウェア バーナーでディスクを確認すると、モードが XA に設定されていることがわかります。書き込む前にこのモードを設定することはできますか? また、モード 1 で書き込まれたセッションがある場合、ディスクの空き容量を決定する問題をどのように解決できますか? ディスクがどのモードで書き込まれたかを知ることはできますか?

ありがとう。

4

1 に答える 1

1

総ディスク容量を取得するには、セクター数に各セクターのユーザー データ フィールドの長さを掛ける必要があります (CD-ROM/XA (eXtended Architecture) モード 2 では、2048 バイトではなく 2336 バイトになります)。


CD-ROM のセクターには 2048 バイトのユーザー データが含まれ、残りの 304 バイトは他の目的に使用されます。すべてのデータ セクターは、16 バイトのヘッダーで始まります。

  • 12 バイトの同期フィールド (00 ff ff ff ff ff ff ff ff ff 00)
  • 3 バイト アドレス (分、秒、1/75 秒)
  • 1バイトモード

モード バイトは、セクター内の残りの 2336 バイトがどのように見えるかを決定します。

  • モード 0: null データ。CD録音には実用的ではない
  • モード 1: 典型的な CD-ROM レイアウト 2048 バイトのユーザー データ 4 バイトの EDC (エラー検出コード、32 ビット CRC) 8 バイトの予約済みスペース、ゼロに設定 172 バイトの「P」パリティ 104 バイトの「Q」 " パリティ
  • モード 2: 2336 バイトのユーザー データ。通常は CD-ROM/XA に使用されます。

1 つのトラックのセクターに提供されたデータのタイプを取得するには、IRawCDImageTrackInfoインターフェイス からメソッドget_SectorTypeを使用できます。

可能なセクター タイプは、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 個​​の連続するサンプルに分解でき、各サンプルは 4 バイトです。1 つのサンプルのレイアウトは、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」モードとも呼ばれ、1 枚のディスクでオーディオ トラックとデータ トラックを混在させることができます。このセクター タイプは、モード 2 の「フォームレス」とも呼ばれ、非推奨と見なされ、めったに使用されません。
  • IMAPI_CD_SECTOR_MODE2FORM1 このセクター タイプでは、ユーザー データはセクター/フレームあたり 2048 バイトです。すべてのモード 2 セクタ タイプは「CD-ROM XA」モードとも呼ばれ、1 枚のディスクでオーディオ トラックとデータ トラックを混在させることができます。
  • IMAPI_CD_SECTOR_MODE2FORM2 このセクター タイプでは、ユーザー データはセクター/フレームあたり 2336 バイトあり、最後の 4 バイトはオプションの CRC コード (使用しない場合はゼロ) です。すべてのモード 2 セクタ タイプは「CD-ROM XA」モードとも呼ばれ、1 枚のディスクでオーディオ トラックとデータ トラックを混在させることができます。このセクター タイプは、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、およびスクランブリングが既にデータ ストリームに追加されています。

備考: 一部のセクター タイプは、1 つのイメージ内の他のセクター タイプと互換性がありません。この状態の典型的な例を次に示します。最初のトラックがオーディオの場合、すべてのトラックがオーディオでなければなりません。最初のトラックが Mode1 の場合、すべてのトラックが Mode1 でなければなりません。3 つのモード 2 (XA) セクター (モード 2 フォーム 0、モード 2 フォーム 1、およびモード 2 フォーム 2) のみを 1 つのディスク イメージ内で混在させることができ、その場合でも他のモード 2 (XA) セクター タイプとのみ混在させることができます。

于 2013-11-13T15:22:04.533 に答える