다음을 통해 공유


IMiniportWaveRTStream::AllocateAudioBuffer 메서드(portcls.h)

AllocateAudioBuffer 메서드는 오디오 데이터에 대한 순환 버퍼를 할당합니다.

구문

NTSTATUS AllocateAudioBuffer(
  ULONG               RequestedSize,
  PMDL                *AudioBufferMdl,
  ULONG               *ActualSize,
  ULONG               *OffsetFromFirstPage,
  MEMORY_CACHING_TYPE *CacheType
);

매개 변수

RequestedSize

오디오 버퍼의 요청된 크기(바이트)를 지정합니다.

AudioBufferMdl

오디오 버퍼를 설명하는 MDL(메모리 설명자 목록)에 대한 출력 포인터입니다. 이 매개 변수는 메서드가 MDL에 포인터를 쓰는 호출자 할당 포인터 변수를 가리킵니다. Windows 커널 MDL에 대한 일반적인 내용은 MDL 사용을 참조하세요.

ActualSize

할당된 버퍼의 실제 크기(바이트)에 대한 출력 포인터입니다. 이 매개 변수는 메서드가 크기 값을 쓰는 ULONG 변수를 가리킵니다.

OffsetFromFirstPage

MDL의 첫 번째 페이지 시작부터 버퍼 오프셋(바이트)에 대한 출력 포인터입니다. 이 매개 변수는 메서드가 오프셋 값을 작성하는 호출자가 할당한 ULONG 변수를 가리킵니다.

CacheType

클라이언트가 오디오 버퍼에 대해 요청하는 캐싱 유형을 지정합니다. 이 매개 변수는 MEMORY_CACHING_TYPE 열거형 값입니다. 자세한 내용은 아래 설명 섹션을 참조하세요.

반환 값

이 메서드는 NTSTATUS를 반환합니다. AllocateAudioBuffer는 호출에 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 메서드는 적절한 오류 상태 코드를 반환합니다. 다음 표에서는 코드에 상태 가능한 오류 중 일부를 보여 줍니다.

반환 코드 설명
STATUS_UNSUCCESSFUL 드라이버는 지정된 버퍼 특성 조합을 지원하지 않습니다.
STATUS_INSUFFICIENT_RESOURCES 메모리가 부족하여 버퍼를 할당할 수 없습니다.
STATUS_DEVICE_NOT_READY 디바이스가 준비되지 않았습니다.

설명

참고: Intel 고화질 오디오 코덱용 미니포트는 캐시 일관성을 보장하기 위해 MmWriteCombined의 CacheType을 지정해야 합니다. Intel 고화질 오디오 컨트롤러가 스눕이 아닌 작업에 대해 구성될 수 있기 때문입니다.

클라이언트에서 KSPROPERTY_RTAUDIO_BUFFER 요청을 받은 후 포트 드라이버는 AllocateAudioBuffer 메서드를 호출하여 나중에 포트 드라이버가 클라이언트의 가상 주소 공간에 매핑할 수 있는 순환 버퍼를 할당합니다.

AllocateAudioBuffer를 호출하는 동안 미니포트 드라이버는 IPortWaveRTStream::AllocatePagesForMdl 또는 IPortWaveRTStream::AllocateContiguousPagesForMdl을 호출하여 순환 버퍼를 할당합니다. 또한 미니포트 드라이버는 오디오 하드웨어에서 재생하거나 이 버퍼에 기록하도록 프로그래밍하지만 포트 드라이버가 State=KSSTATE_RUN IMiniportWaveRTStream::SetState를 호출할 때까지 DMA 전송을 시작하지 않습니다. AllocateAudioBuffer 메서드의 출력 매개 변수에는 오디오 버퍼에 대한 MDL, 드라이버 할당 버퍼의 실제 크기 및 MDL의 첫 번째 페이지 시작부터 버퍼 시작 오프셋이 포함됩니다.

RequestedSize 는 클라이언트가 오디오 버퍼에 대해 요청하는 크기를 나타내는 입력 매개 변수입니다. ActualSize는 오디오 버퍼의 실제 크기를 나타내는 출력 매개 변수입니다.

오디오 디바이스는 샘플 경계에서 시작 및 종료하거나 다른 유형의 하드웨어 종속 맞춤 제약 조건을 충족하도록 오디오 버퍼가 필요할 수 있습니다. 충분한 메모리를 사용할 수 있는 경우 버퍼의 실제 크기는 요청된 크기가 가장 가까운 샘플 또는 기타 하드웨어 제한 경계로 반올림(위쪽 또는 아래로)됩니다. 실제 크기는 적어도 요청된 크기여야 합니다. 그렇지 않으면 WASAPI(오디오 세션 API) 오디오 엔진이 버퍼를 사용하지 않으며 스트림 만들기가 실패합니다.

요구 사항

요구 사항
헤더 portcls.h
IRQL PASSIVE_LEVEL

추가 정보

IMiniPortWaveRTStream