Compartir a través de


Método IMiniportWaveRTStream::AllocateAudioBuffer (portcls.h)

El método AllocateAudioBuffer asigna un búfer cíclico para los datos de audio.

Sintaxis

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

Parámetros

RequestedSize

Especifica el tamaño solicitado, en bytes, del búfer de audio.

AudioBufferMdl

Puntero de salida para una lista de descriptores de memoria (MDL) que describe el búfer de audio. Este parámetro apunta a una variable de puntero asignada por el autor de la llamada en la que el método escribe un puntero en la MDL. Para obtener información general sobre las MDL del kernel de Windows, consulte Uso de MDL.

ActualSize

Puntero de salida para el tamaño real, en bytes, del búfer asignado. Este parámetro apunta a una variable ULONG en la que el método escribe el valor de tamaño.

OffsetFromFirstPage

Puntero de salida para el desplazamiento del búfer, en bytes, desde el inicio de la primera página de MDL. Este parámetro apunta a una variable ULONG asignada por el autor de la llamada en la que el método escribe el valor de desplazamiento.

CacheType

Especifica el tipo de almacenamiento en caché que el cliente solicita para el búfer de audio. Este parámetro es un valor de enumeración MEMORY_CACHING_TYPE. Para obtener más información, vea la sección Comentarios a continuación.

Valor devuelto

Este método devuelve NTSTATUS. AllocateAudioBuffer devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, el método devuelve un código de estado de error adecuado. En la tabla siguiente se muestran algunos de los posibles códigos de estado de error.

Código devuelto Descripción
STATUS_UNSUCCESSFUL El controlador no admite la combinación especificada de atributos de búfer.
STATUS_INSUFFICIENT_RESOURCES La memoria insuficiente está disponible para asignar el búfer.
STATUS_DEVICE_NOT_READY El dispositivo no está listo.

Comentarios

Nota: Los miniportes para códecs de audio intel de alta definición deben especificar un cacheType de MmWriteCombined para garantizar la coherencia de la memoria caché. Esto se debe a que el controlador de audio de alta definición intel se puede configurar para la operación que no es de snoop.

Después de recibir una solicitud de KSPROPERTY_RTAUDIO_BUFFER del cliente, el controlador de puerto llama al método AllocateAudioBuffer para asignar un búfer cíclico que el controlador de puerto puede asignar posteriormente al espacio de direcciones virtuales del cliente.

Durante la llamada a AllocateAudioBuffer, el controlador de miniporta asigna el búfer cíclico llamando a IPortWaveRTStream::AllocatePagesForMdl o IPortWaveRTStream::AllocateContiguousPagesForMdl. El controlador de miniporte también programa el hardware de audio para reproducir o grabar en este búfer, pero no inicia las transferencias DMA hasta que el controlador de puerto llama a IMiniportWaveRTStream::SetState con State=KSSTATE_RUN. Los parámetros de salida del método AllocateAudioBuffer incluyen mdL para el búfer de audio, el tamaño real del búfer asignado por el controlador y el desplazamiento del inicio del búfer desde el inicio de la primera página de MDL.

RequestedSize es un parámetro de entrada que indica el tamaño que el cliente solicita para el búfer de audio. ActualSize es un parámetro de salida que indica el tamaño real del búfer de audio.

El dispositivo de audio puede requerir que el búfer de audio comience y finalice en los límites de ejemplo o para cumplir otros tipos de restricciones de alineación dependientes del hardware. Si hay suficiente memoria disponible, el tamaño real del búfer es el tamaño solicitado redondeado (arriba o abajo) al ejemplo más cercano u otro límite restringido por hardware. El tamaño real debe ser al menos el tamaño solicitado; De lo contrario, el motor de audio de Audio Session API (WASAPI) no usará el búfer y se producirá un error en la creación de secuencias.

Requisitos

Requisito Valor
Header portcls.h
IRQL PASSIVE_LEVEL

Consulte también

IMiniPortWaveRTStream