Compartilhar via


Formatos de dados de áudio ACX e listas de formato de dados

Este tópico descreve como os tipos de formato ACX são usados por um driver para rastrear, gerenciar e comparar formatos de dados de sinal. Para obter uma visão geral do ACX e uma lista de termos ACX comuns, consulte a Visão geral das Extensões de Classe de Áudio ACX. Para obter informações gerais sobre formatos de codificação de áudio, consulte Formatos de dados de áudio.

Objetos ACXDATAFORMAT e ACXDATAFORMATLIST

Dois objetos ACX são usados para trabalhar com formatos de dados.

  • ACXDATAFORMAT que representa um formato de dados compatível com o dispositivo de áudio.
  • ACXDATAFORMATLIST, que é uma lista de formatos de dados de áudio disponíveis para uso.

Para obter mais informações sobre como trabalhar com objetos ACX, consulte Resumo de objetos ACX.

O ACX usa a enumeração ACX_DATAFORMAT_TYPE, que faz referência a uma estrutura KSDATAFORMAT para especificar um formato de dados.

ACXDATAFORMAT

ACXDATAFORMAT fornece um identificador para um objeto de formato de dados. Os drivers criam esses objetos usando a função AcxDataFormatCreate e podem compará-los usando AcxDataFormatIsEqual.

ACXDATAFORMATLIST

ACXDATAFORMATLIST é um contêiner para objetos de formato de dados. Quando o driver cria um ACXPIN, o ACX cria automaticamente uma lista de formato de dados vazia para o modo de processamento de sinal bruto. Um driver pode acessar a lista usando AcxPinGetRawDataFormatList. Esta função retorna a lista de formatos de dados ACXDATAFORMATLIST para o ACXPIN especificado.

Um driver pode adicionar um formato a uma lista específica usando AcxDataFormatListAddDataFormat.

    // The raw processing mode list is associated with each single circuit
    // by ACX. A driver uses AcxPinGetRawDataFormatList to retrieve the built-in raw
    // data-format list.
    //
    RETURN_NTSTATUS_IF_TRUE(CodecCaptureHostPin >= CodecCapturePinCount, STATUS_INVALID_PARAMETER);
    formatList = AcxPinGetRawDataFormatList(Pin[CodecCaptureHostPin]);
    RETURN_NTSTATUS_IF_TRUE(formatList == nullptr, STATUS_INSUFFICIENT_RESOURCES);

    //
    // The driver uses AcxDataFormatListAddDataFormat to add data formats to the raw
    // processing mode list associated with the current circuit.
    //
    RETURN_NTSTATUS_IF_FAILED(AcxDataFormatListAddDataFormat(formatList, formatPcm44100c1));
    RETURN_NTSTATUS_IF_FAILED(AcxDataFormatListAddDataFormat(formatList, formatPcm48000c1));

Um driver pode criar listas de formato de dados adicionais e associá-las a um modo de processamento de sinal específico usando AcxDataFormatListCreate para um WDFDEVICE específico, como ACXPIN.

NTSTATUS AcxDataFormatListCreate(device, attributes, <format cfg>, &ACXDATAFORMATLIST)

Um driver pode recuperar uma lista de formatos associada a um pin específico usando AcxPinRetrieveModeDataFormatList.

Um driver pode remover um formato de uma lista específica usando AcxDataFormatListRemoveDataFormat. Observe que, se esse formato também for o formato padrão, o ACX selecionará o primeiro disponível na lista como padrão (se houver).

Um driver pode especificar um formato padrão na lista usando AcxDataFormatListAssignDefaultDataFormat. O formato padrão deve estar presente na lista, caso contrário, ele será adicionado.

Um driver pode recuperar um formato padrão na lista usando AcxDataFormatListRetrieveDefaultDataFormat.

Um driver pode iterar em uma lista de formatos e fazer alterações em grupo usando os DDIs a seguir.

  • AcxDataFormatListBeginIteration
  • AcxDataFormatListRetrieveNextFormat
  • AcxDataFormatListEndIteration

Observe que as alterações são aplicadas somente após o driver encerrar a iteração.

VOID AcxDataFormatListBeginIteration(ACXDATAFORMATLIST, PACX_DATAFORMAT_LIST_ITERATOR)
NTSTATUS AcxDataFormatListRetrieveNextDataFormat(ACXDATAFORMATLIST,  PACX_DATAFORMAT_LIST_ITERATOR, &ACXFORMAT);
VOID AcxDataFormatListEndIteration(ACXDATAFORMATLIST, PACX_DATAFORMAT_LIST_ITERATOR)

Os DDIs acima removem a necessidade de o driver implementar os seguintes retornos de chamada:

PFN_ACX_PIN_GET_SIGNALPROCESSING_MODES      	EvtAcxPinGetSignalProcessingModes;
PFN_ACX_PIN_GET_DATAFORMATS                     EvtAcxPinGetDataFormats;
PFN_ACX_PIN_GET_DEFAULT_DATAFORMAT              EvtAcxPinGetDefaultDataFormat;
PFN_ACX_PIN_PROPOSE_DATAFORMAT                  EvtAcxPinProposeDataFormat;

Os DDIs acima também removem a necessidade de o driver implementar os seguintes eventos (o ACX dispara esse evento automaticamente após a alteração da lista):

// Clients enable this event to receive format change notifications. Drivers fire this even when it detects a dynamic format change on the specified pin (h/w pin).
//
    KSEVENT_PINCAPS_FORMATCHANGE(pin)

Os DDIs acima também removem a necessidade de o driver gerenciar os modos e formatar o armazenamento por conta própria.

O driver ainda precisará oferecer suporte à DDI a seguir se os formatos de entrada/saída não forem os mesmos (circuito DSP). Essa DDI é independente de fluxo, específica do pin de circuito e só tem suporte em pinos de streaming não s/w.

PFN_ACX_PIN_SET_DATAFORMAT              EvtAcxPinSetDataFormat;

Consulte também

cabeçalho acxdataformat.h

de formatos de dados de áudio

Estrutura KSDATAFORMAT

visão geral das Extensões de Classe de Áudio ACX