Condividi tramite


Specifica degli intervalli di dati AC-3

Il file di intestazione Mmreg.h definisce il valore 0x0092 come tag wave-format per AC-3-over-S/PDIF:

    #define WAVE_FORMAT_DOLBY_AC3_SPDIF  0x0092

I tag di formato onda 0x0240 e 0x0241 sono sinonimo di 0x0092 e molte applicazioni DVD considerano i tre tag come identici. Tuttavia, per eliminare la ridondanza, i driver e le applicazioni devono supportare solo tag 0x0092 (e non supportare tag 0x0240 e 0x0241).

Il GUID formato-sottotipo corrispondente può essere specificato in termini di tag wave-format usando la macro DEFINE_WAVEFORMATEX_GUID dal file di intestazione Ksmedia.h come indicato di seguito:

  #define KSDATAFORMAT_SUBTYPE_AC3_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)

Nell'esempio di codice seguente viene illustrato come un driver WaveCyclic o WavePci miniport può specificare le voci di tabella KSDATARANGE_AUDIO per un pin che supporta il formato AC-3-over-S/PDIF:

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
  }
};

La seconda voce dell'intervallo di dati nella tabella precedente è necessaria per consentire a DirectSound di gestire il formato AC-3-over-S/PDIF in Windows 2000 SP2 e in Microsoft Windows 98 SE + hotfix.

Per ogni intervallo di dati specificato dal driver miniport con KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, il driver di porta aggiunge automaticamente un secondo intervallo di dati specificato con KSDATAFORMAT_SPECIFIER_DSOUND ma è altrimenti identico al primo. È possibile verificare questa operazione usando l'utilità KsStudio per visualizzare l'elenco degli intervalli di dati. In Windows 2000 e Windows 98 il driver di porta crea KSDATAFORMAT_SPECIFIER_DSOUND versioni di intervalli di dati solo per i formati KSDATAFORMAT_SUBTYPE_PCM perché DirectSound versioni precedenti a DirectSound 8 supportano solo PCM. Questa limitazione viene rimossa in Windows XP e versioni successive e in Windows Me. Tuttavia, non viene rimosso in Windows 2000 SP2 o nel pacchetto di correzione frequente per Windows 98 SE e per supportare non PCM in DirectSound in queste versioni di Windows, un driver deve elencare in modo esplicito due intervalli di dati per ogni formato di dati non PCM con KSDATAFORMAT_SPECIFIER_WAVEFORMATEX e un altro con KSDATAFORMAT_SPECIFIER_DSOUND.

Come illustrato in S/PDIF Pass-Through trasmissione di flussi non PCM, i due intervalli di dati AC-3-over-S/PDIF usano entrambi i parametri PCM seguenti: due canali e 16 bit per canale.