Partager via


Spécification de plages de données AC-3

Le fichier d’en-tête Mmreg.h définit la valeur 0x0092 comme balise de format d’onde pour AC-3-over-S/PDIF :

    #define WAVE_FORMAT_DOLBY_AC3_SPDIF  0x0092

Les étiquettes au format wave 0x0240 et 0x0241 sont synonymes de 0x0092 et de nombreuses applications DVD traitent les trois étiquettes comme identiques. Toutefois, pour éliminer la redondance, les pilotes et les applications doivent uniquement prendre en charge les 0x0092 de balises (et non pas les balises 0x0240 et 0x0241).

Le GUID de sous-type format correspondant peut être spécifié en termes de balise wave-format à l’aide de la macro DEFINE_WAVEFORMATEX_GUID du fichier d’en-tête Ksmedia.h comme suit :

  #define KSDATAFORMAT_SUBTYPE_AC3_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)

L’exemple de code suivant montre comment un pilote miniport WaveCyclique ou WavePci peut spécifier les entrées de table KSDATARANGE_AUDIO pour une broche qui prend en charge le format 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 deuxième entrée de plage de données dans le tableau précédent est nécessaire pour permettre à DirectSound de gérer le format AC-3-over-S/PDIF non PCM dans Windows 2000 SP2 et dans Microsoft Windows 98 SE + correctif logiciel.

Pour chaque plage de données spécifiée par le pilote miniport avec KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, le pilote de port ajoute automatiquement une deuxième plage de données spécifiée avec KSDATAFORMAT_SPECIFIER_DSOUND mais qui est identique à la première. (Vous pouvez le vérifier à l’aide de l’utilitaire KsStudio pour afficher la liste des plages de données.) Dans Windows 2000 et Windows 98, le pilote de port crée KSDATAFORMAT_SPECIFIER_DSOUND versions de plages de données uniquement pour les formats KSDATAFORMAT_SUBTYPE_PCM, car les versions DirectSound antérieures à DirectSound 8 prennent uniquement en charge PCM. Cette limitation est supprimée dans Windows XP et versions ultérieures et dans Windows Me. Toutefois, il n’est pas supprimé dans Windows 2000 SP2 ou dans le package de correctif rapide pour Windows 98 SE, et pour prendre en charge les non-PCM sur DirectSound sur ces versions de Windows, un pilote doit explicitement répertorier deux plages de données pour chaque format de données non PCM : une avec KSDATAFORMAT_SPECIFIER_WAVEFORMATEX et une autre avec KSDATAFORMAT_SPECIFIER_DSOUND.

Comme expliqué dans S/PDIF Pass-Through Transmission de flux non PCM, les deux plages de données AC-3-over-S/PDIF utilisent les paramètres PCM suivants : deux canaux et 16 bits par canal.