EVT_ACX_RAMPED_VOLUME_ASSIGN_LEVEL función de devolución de llamada (acxelements.h)
El controlador implementa el EVT_ACX_RAMPED_VOLUME_ASSIGN_LEVEL devolución de llamada y se llama cuando se establece el nivel de volumen de un canal para un nodo de volumen.
Sintaxis
EVT_ACX_RAMPED_VOLUME_ASSIGN_LEVEL EvtAcxRampedVolumeAssignLevel;
NTSTATUS EvtAcxRampedVolumeAssignLevel(
ACXVOLUME Volume,
ULONG Channel,
LONG VolumeLevel,
ACX_VOLUME_CURVE_TYPE CurveType,
ULONGLONG CurveDuration
)
{...}
Parámetros
Volume
Objeto ACXVOLUME existente, inicializado. Para obtener más información sobre los objetos ACX, vea Resumen de objetos ACX.
Channel
Un ULONG que hace referencia a un canal en el nodo de volumen especificado. Si este valor es -1, hace referencia al canal maestro que representa el nivel de volumen de todos los canales del nodo de volumen.
VolumeLevel
Valor LONG que especifica el nivel de volumen final deseado para el canal especificado. Si el valor del canal es -1 (que hace referencia al canal maestro), todos los canales de este nodo de volumen se establecerán en este nivel de volumen. Los valores de nivel de volumen usan la siguiente escala:
-2147483648 es -decibelios infinitos (atenuación),
-2147483647 es -32767.999998474 decibeles (atenuación) y
+2147483647 es +32767.99998474 decibels (ganancia).
CurveType
Usa la enumeración AUDIO_CURVE_TYPE para especificar el algoritmo de curva que se aplicará durante la duración especificada, con el fin de alcanzar el nivel deseado. La curva comienza en el nivel de volumen actual y termina en el nivel de volumen de destino especificado en el parámetro Volume.
CurveDuration
Especifica la duración, en cientos de nanosegundos, sobre los que debe surtir efecto la curva de volumen.
Valor devuelto
Devuelve STATUS_SUCCESS
si la llamada se realizó correctamente. De lo contrario, devuelve un código de error adecuado. Para obtener más información, vea Uso de valores NTSTATUS.
Comentarios
Ejemplo
A continuación se muestra el uso de ejemplo.
typedef struct _CODEC_VOLUME_ELEMENT_CONTEXT {
LONG VolumeLevel[MAX_CHANNELS];
} CODEC_VOLUME_ELEMENT_CONTEXT, *PCODEC_VOLUME_ELEMENT_CONTEXT;
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(CODEC_VOLUME_ELEMENT_CONTEXT, GetCodecVolumeElementContext)
EVT_ACX_RAMPED_VOLUME_ASSIGN_LEVEL CodecR_EvtRampedVolumeAssignLevel;
NTSTATUS
NTAPI
CodecR_EvtRampedVolumeAssignLevel(
_In_ ACXVOLUME Volume,
_In_ ULONG Channel,
_In_ LONG VolumeLevel,
_In_ ACX_VOLUME_CURVE_TYPE CurveType,
_In_ ULONGLONG CurveDuration
)
{
PCODEC_VOLUME_ELEMENT_CONTEXT volumeCtx;
ULONG i;
PAGED_CODE();
UNREFERENCED_PARAMETER(CurveType);
UNREFERENCED_PARAMETER(CurveDuration);
volumeCtx = GetCodecVolumeElementContext(Volume);
ASSERT(volumeCtx);
if (Channel != ALL_CHANNELS_ID)
{
volumeCtx->VolumeLevel[Channel] = VolumeLevel;
}
else
{
for (i = 0; i < MAX_CHANNELS; ++i)
{
volumeCtx->VolumeLevel[i] = VolumeLevel;
}
}
return STATUS_SUCCESS;
}
Requisitos de ACX
Versión mínima de ACX: 1.0
Para obtener más información sobre las versiones de ACX, consulte Introducción a la versión de ACX.
Requisitos
Requisito | Valor |
---|---|
Header | acxelements.h |
IRQL | PASSIVE_LEVEL |