Share via


Angeben von AC-3-Datenbereichen

Die Headerdatei Mmreg.h definiert den Wert 0x0092 als Wave-Format-Tag für AC-3-over-S/PDIF:

    #define WAVE_FORMAT_DOLBY_AC3_SPDIF  0x0092

Tags im Wellenformat 0x0240 und 0x0241 stehen für 0x0092, und viele DVD-Anwendungen behandeln die drei Tags als identisch. Um Redundanz zu vermeiden, sollten Treiber und Anwendungen jedoch nur Tag-0x0092 unterstützen (und keine Tags 0x0240 und 0x0241 unterstützen).

Die entsprechende Format-Subtype-GUID kann mithilfe des DEFINE_WAVEFORMATEX_GUID Makros aus der Headerdatei Ksmedia.h wie folgt als Wave-Format-Tag angegeben werden:

  #define KSDATAFORMAT_SUBTYPE_AC3_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)

Das folgende Codebeispiel zeigt, wie ein WaveCyclic- oder WavePci-Miniporttreiber die KSDATARANGE_AUDIO Tabelleneinträge für einen Pin angeben kann, der das AC-3-over-S/PDIF-Format unterstützt:

static KSDATARANGE_AUDIO PinDataRangesAC3Stream[] =
{
  // 48-kHz AC-3 over S/PDIF
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
    },
    2,     // Max number of channels
    16,    // Minimum number of bits per sample
    16,    // Maximum number of bits per channel
    48000, // Minimum rate
    48000  // Maximum rate
  },

  // If you do not include this second data range (which is identical
  // to the first except for the value KSDATAFORMAT_SPECIFIER_DSOUND),
  // then your non-PCM pin is not seen by DirectSound on Windows 98 SE
  // or Windows 2000, regardless of the DirectX version or whether a
  // hotfix or service pack is installed.
  {
    {
      sizeof(KSDATARANGE_AUDIO),
      0,
      0,
      0,
      STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
      STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF),
      STATICGUIDOF(KSDATAFORMAT_SPECIFIER_DSOUND)
    },
    2,     // Max number of channels
    16,    // Minimum number of bits per sample
    16,    // Maximum number of bits per channel
    48000, // Minimum rate
    48000  // Maximum rate
  }
};

Der zweite Datenbereichseintrag in der vorherigen Tabelle ist erforderlich, damit DirectSound das Nicht-PCM AC-3-over-S/PDIF-Format in Windows 2000 SP2 und in Microsoft Windows 98 SE + Hotfix verarbeiten kann.

Für jeden Datenbereich, den der Miniporttreiber mit KSDATAFORMAT_SPECIFIER_WAVEFORMATEX angibt, fügt der Porttreiber automatisch einen zweiten Datenbereich hinzu, der mit KSDATAFORMAT_SPECIFIER_DSOUND angegeben wird, ansonsten aber mit dem ersten identisch ist. (Sie können dies überprüfen, indem Sie das KsStudio-Hilfsprogramm verwenden, um die Liste der Datenbereiche anzuzeigen.) In Windows 2000 und Windows 98 erstellt der Porttreiber KSDATAFORMAT_SPECIFIER_DSOUND Versionen von Datenbereichen nur für KSDATAFORMAT_SUBTYPE_PCM Formate, da DirectSound-Versionen vor DirectSound 8 nur PCM unterstützen. Diese Einschränkung wird in Windows XP und höher und in Windows Me entfernt. Es wird jedoch nicht in Windows 2000 SP2 oder im Hot-Fix-Paket für Windows 98 SE entfernt, und um Nicht-PCM in DirectSound in diesen Windows-Versionen zu unterstützen, sollte ein Treiber explizit zwei Datenbereiche für jedes Nicht-PCM-Datenformat auflisten: einer mit KSDATAFORMAT_SPECIFIER_WAVEFORMATEX und ein anderer mit KSDATAFORMAT_SPECIFIER_DSOUND.

Wie in S/PDIF Pass-Through Übertragung von Nicht-PCM-Streams erläutert, verwenden die beiden AC-3-über-S/PDIF-Datenbereiche die folgenden PCM-Parameter: zwei Kanäle und 16 Bit pro Kanal.