다음을 통해 공유


AC-3 데이터 범위 지정

헤더 파일 Mmreg.h는 AC-3 over-S/PDIF에 대한 웨이브 형식 태그로 0x0092 값을 정의합니다.

    #define WAVE_FORMAT_DOLBY_AC3_SPDIF  0x0092

0x0240 및 0x0241 웨이브 형식 태그는 0x0092 동의어이며 많은 DVD 응용 프로그램에서 세 태그를 동일하게 처리합니다. 그러나 중복성을 제거하기 위해 드라이버 및 애플리케이션은 태그 0x0092만 지원해야 합니다(태그 0x0240 및 0x0241 지원하지 않음).

해당 format-subtype GUID는 다음과 같이 헤더 파일 Ksmedia.h의 DEFINE_WAVEFORMATEX_GUID 매크로를 사용하여 웨이브 형식 태그 측면에서 지정할 수 있습니다.

  #define KSDATAFORMAT_SUBTYPE_AC3_SPDIF    \
                      DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)

다음 코드 예제에서는 WaveCyclic 또는 WavePci 미니포트 드라이버가 AC-3 over-S/PDIF 형식을 지원하는 핀에 대한 KSDATARANGE_AUDIO 테이블 항목을 지정하는 방법을 보여 줍니다.

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

이전 표의 두 번째 데이터 범위 항목은 DirectSound가 Windows 2000 SP2 및 Microsoft Windows 98 SE + 핫픽스의 비 PCM AC-3 over-S/PDIF 형식을 처리할 수 있도록 하는 데 필요합니다.

미니포트 드라이버가 KSDATAFORMAT_SPECIFIER_WAVEFORMATEX 사용하여 지정하는 각 데이터 범위에 대해 포트 드라이버는 KSDATAFORMAT_SPECIFIER_DSOUND 사용하여 지정되었지만 그렇지 않으면 첫 번째 데이터 범위와 동일한 두 번째 데이터 범위를 자동으로 추가합니다. (KsStudio 유틸리티를 사용하여 데이터 범위 목록을 확인하여 이를 확인할 수 있습니다.) Windows 2000 및 Windows 98에서 포트 드라이버는 DirectSound 8 이전의 DirectSound 버전이 PCM만 지원하므로 KSDATAFORMAT_SUBTYPE_PCM 형식에 대해서만 KSDATAFORMAT_SPECIFIER_DSOUND 버전의 데이터 범위를 만듭니다. 이 제한 사항은 Windows XP 이상 및 Windows Me에서 제거됩니다. 그러나 Windows 2000 SP2 또는 Windows 98 SE용 핫픽스 패키지에서 제거되지 않으며, 이러한 Windows 버전의 DirectSound에서 비 PCM을 지원하려면 드라이버가 PCM이 아닌 각 데이터 형식에 대해 두 개의 데이터 범위(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX 있는 데이터 형식과 KSDATAFORMAT_SPECIFIER_DSOUND 있는 데이터 범위)를 명시적으로 나열해야 합니다.

비 PCM 스트림의 S/PDIF Pass-Through 전송에 설명된 대로 두 AC-3 over-S/PDIF 데이터 범위는 모두 두 개의 채널과 채널당 16비트의 PCM 매개 변수를 사용합니다.