Compartir a través de


Especificación de intervalos de datos de AC-3

El archivo de encabezado Mmreg.h define el valor 0x0092 para que sea la etiqueta de formato de onda para AC-3-over-S/PDIF:

    #define WAVE_FORMAT_DOLBY_AC3_SPDIF  0x0092

Las etiquetas de formato de onda 0x0240 y 0x0241 son sinónimos de 0x0092 y muchas aplicaciones de DVD tratan las tres etiquetas como idénticas. Sin embargo, para eliminar la redundancia, los controladores y las aplicaciones solo deben admitir 0x0092 de etiquetas (y no admitir etiquetas 0x0240 y 0x0241).

El GUID de subtipo de formato correspondiente se puede especificar en términos de la etiqueta de formato de onda mediante la macro DEFINE_WAVEFORMATEX_GUID del archivo de encabezado Ksmedia.h de la siguiente manera:

  #define KSDATAFORMAT_SUBTYPE_AC3_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)

En el ejemplo de código siguiente se muestra cómo un controlador de miniporte WaveCíclica o WavePci puede especificar las entradas de tabla de KSDATARANGE_AUDIO para un pin que admita el 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 segunda entrada de intervalo de datos de la tabla anterior es necesaria para permitir que DirectSound controle el formato AC-3-over-S/PDIF que no es PCM en Windows 2000 SP2 y en Microsoft Windows 98 SE + revisión.

Para cada intervalo de datos que especifica el controlador de miniporte con KSDATAFORMAT_SPECIFIER_WAVEFORMATEX, el controlador de puerto agrega automáticamente un segundo intervalo de datos especificado con KSDATAFORMAT_SPECIFIER_DSOUND pero, de lo contrario, es idéntico al primero. (Puede comprobarlo mediante la utilidad KsStudio para ver la lista de intervalos de datos). En Windows 2000 y Windows 98, el controlador de puerto crea KSDATAFORMAT_SPECIFIER_DSOUND versiones de intervalos de datos solo para formatos de KSDATAFORMAT_SUBTYPE_PCM porque las versiones de DirectSound anteriores a DirectSound 8 solo admiten PCM. Esta limitación se elimina en Windows XP y versiones posteriores y en Windows Me. Sin embargo, no se quita en Windows 2000 SP2 o en el paquete de corrección activa para Windows 98 SE, y para admitir no PCM en DirectSound en estas versiones de Windows, un controlador debe enumerar explícitamente dos intervalos de datos para cada formato de datos que no sea PCM, uno con KSDATAFORMAT_SPECIFIER_WAVEFORMATEX y otro con KSDATAFORMAT_SPECIFIER_DSOUND.

Como se explica en S/PDIF Pass-Through Transmisión de flujos que no son PCM, los dos intervalos de datos AC-3 over-S/PDIF usan los siguientes parámetros PCM: dos canales y 16 bits por canal.