Compartilhar via


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

Este tópico descreve como os tipos de formato ACX são usados para ajudar um driver a rastrear, gerenciar e comparar formatos de dados de sinal. Para obter uma visão geral do ACX e uma lista de termos comuns do ACX, consulte 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 suportado pelo 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 formatos de dados vazios para o modo de processamento de sinal bruto. Um driver pode acessar a lista usando AcxPinGetRawDataFormatList. Ele retorna o 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 formatos de dados adicionais e associá-las a um modo de processamento de sinal específico usando AcxDataFormatListCreate para um dispositivo WDF específico, como ACXPIN.

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

Um driver pode recuperar uma lista de formatos associada a um pino 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).

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 sobre uma lista de formatos e fazer alterações como um grupo usando as seguintes DDIs.

Observe que as alterações serão aplicadas somente depois que o driver termina 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)

As DDIs acima eliminam 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;

As DDIs acima também eliminam a necessidade de o driver implementar os seguintes eventos (o ACX aciona esse evento automaticamente após a lista ser alterada):

// 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)

As DDIs acima também eliminam a necessidade de o driver gerenciar os modos e formatos de armazenamento por conta própria.

O driver ainda precisará suportar a seguinte DDI se os formatos de entrada/saída não forem os mesmos (circuito DSP). Essa DDI é independente de fluxo, específica para pinos de circuito e suportada apenas em pinos de streaming não s/w.

PFN_ACX_PIN_SET_DATAFORMAT              EvtAcxPinSetDataFormat;

Confira também

acxdataformat.h header

Formatos de dados de áudio

Estrutura KSDATAFORMAT

Visão geral de extensões de classe de áudio ACX