PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION 콜백 함수(hdaudio.h)
루틴은 AllocateDmaBufferWithNotification
DMA 엔진에 대한 시스템 메모리에 데이터 버퍼를 할당합니다.
루틴에 대한 AllocateDmaBufferWithNotification
함수 포인터 형식은 다음과 같이 정의됩니다.
구문
PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION PallocateDmaBufferWithNotification;
NTSTATUS PallocateDmaBufferWithNotification(
[in] PVOID _context,
[in] HANDLE Handle,
[in] ULONG NotificationCount,
[in] SIZE_T RequestedBufferSize,
[out] PMDL *BufferMdl,
[out] PSIZE_T AllocatedBufferSize,
PSIZE_T OffsetFromFirstPage,
[out] PUCHAR StreamId,
[out] PULONG FifoSize
)
{...}
매개 변수
[in] _context
HDAUDIO_BUS_INTERFACE_V2 구조체의 Context 멤버에서 컨텍스트 값을 지정합니다.
[in] Handle
DMA 엔진을 식별하는 핸들입니다. 이 핸들 값은 AllocateCaptureDmaEngine 또는 AllocateRenderDmaEngine에 대한 이전 호출에서 가져옵니다.
[in] NotificationCount
오디오 버퍼를 통한 DMA 진행에 따라 필요한 알림 수를 지정합니다. 현재 1 또는 2 값이 지원됩니다. 값이 1이면 순환 오디오 버퍼가 완료되고 DMA가 다시 시작 부분으로 래핑될 때마다 등록된 알림 이벤트가 신호를 보냅니다. 값이 2이면 DMA가 오디오 버퍼의 중간점과 끝(또는 랩어라운드 지점)을 통과할 때 등록된 모든 알림 이벤트가 알림을 받습니다.
[in] RequestedBufferSize
요청된 버퍼 크기(바이트)를 지정합니다.
[out] BufferMdl
할당된 버퍼가 포함된 실제 메모리 페이지를 검색합니다. 이 매개 변수는 PMDL(메모리 설명자 목록)에 대한 포인터인 호출자 할당 변수를 가리킵니다. 이 루틴은 메모리 설명자 목록 버퍼를 설명하는 포인터를 PMDL 변수에 씁니다.
[out] AllocatedBufferSize
할당된 버퍼 크기(바이트)를 검색합니다. 이 매개 변수는 루틴이 할당된 버퍼의 크기를 쓰는 호출자가 할당한 SIZE_T 변수를 가리킵니다.
OffsetFromFirstPage
[out] StreamId
스트림 식별자를 검색합니다. 이 매개 변수는 루틴이 스트림에 할당하는 스트림 식별자를 쓰는 호출자 할당 UCHAR 변수를 가리킵니다.
[out] FifoSize
DMA 엔진의 FIFO 크기(바이트)를 검색합니다. 이 매개 변수는 루틴이 FIFO 크기를 쓰는 호출자 할당 ULONG 변수를 가리킵니다.
반환 값
호출이 성공하면 루틴은 AllocateDmaBufferWithNotification
STATUS_SUCCESS 반환합니다. 그렇지 않으면 루틴이 적절한 오류 코드를 반환합니다. 다음 표에서는 가능한 반환 오류 코드 중 일부를 보여 줍니다.
반환 코드 | 설명 |
---|---|
|
호출자가 너무 높은 IRQL에서 실행 중임을 나타냅니다. |
|
버퍼 할당이 실패했음을 나타냅니다. |
|
핸들 매개 변수 값이 잘못되었음을 나타냅니다. |
|
매개 변수 값 중 하나가 잘못되었음을 나타냅니다(잘못된 포인터). |
|
하드웨어 프로그래밍 시간이 초과되었음을 나타냅니다. 이 경우 하드웨어가 손상된 상태일 수 있습니다. |
|
스트림이 다시 설정 상태가 아니거나 버퍼가 DMA 엔진에 이미 할당되었으며 아직 해제되지 않음을 나타냅니다. |
설명
루틴 AllocateDmaBufferWithNotification
은 FreeDmaBufferWithNotification 루틴과 함께 사용됩니다. 이러한 두 루틴은 HD 오디오 DDI의 HDAUDIO_BUS_INTERFACE_V2 버전에서만 사용할 수 있습니다. 이전에 할당된 DMA 버퍼를 사용하도록 DMA 엔진을 구성하는 SetupDmaEngineWithBdl과 달리 DMA AllocateDmaBufferWithNotification
버퍼를 할당하고 버퍼를 사용하도록 DMA 엔진도 구성합니다.
DMA 엔진이 requestedBufferSize 매개 변수에 요청된 크기의 버퍼를 사용할 수 없는 경우 루틴은 요청된 크기에 최대한 가까운 버퍼를 할당합니다.
오디오 또는 모뎀 코덱의 함수 드라이버는 코덱을 프로그래밍하여 데이터 전송을 관리하고 스트림 식별자를 인식합니다.
AllocateDmaBufferWithNotification
는 버퍼가 포함된 실제 메모리 페이지를 나열하는 MDL을 출력합니다. 버퍼 기본 주소는 목록의 첫 번째 실제 페이지 시작과 일치합니다.
DMA 엔진 핸들의 수명 동안 를 AllocateDmaBufferWithNotification
연속적으로 호출하여 새 DMA 버퍼를 할당할 수 있습니다. 그러나 를 호출 AllocateDmaBufferWithNotification
하기 전에 먼저 FreeDmaBufferWithNotification을 호출하여 이전에 할당된 DMA 버퍼를 해제해야 합니다.
및 FreeDmaBufferWithNotification을 호출하는 AllocateDmaBufferWithNotification
동안 DMA 엔진은 다시 설정 스트림 상태여야 합니다. DMA 엔진은 AllocateCaptureDmaEngine 또는 AllocateRenderDmaEngine 호출 직후 다시 설정 스트림 상태에 있습니다. DMA 엔진을 실행 상태로 변경하려면 SetDmaEngineState를 호출합니다.
FIFO 크기는 DMA 엔진이 내부 버퍼에 보유할 수 있는 최대 바이트 수입니다. 하드웨어 구현에 따라 DMA 엔진의 FIFO 크기는 정적이거나 스트림 형식의 변경에 따라 동적으로 달라질 수 있습니다. FIFO 크기에 대한 자세한 내용은 Intel 고화질 오디오 사양을 참조하세요.
Windows Vista 이상 버전의 Windows에서 WaveRT 미니포트 드라이버는 KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION 속성 요청을 받을 때 이 루틴을 호출합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista 및 이후 버전의 Windows에서 사용할 수 있습니다. |
대상 플랫폼 | 데스크톱 |
머리글 | hdaudio.h(Hdaudio.h 포함) |
IRQL | PASSIVE_LEVEL. |