GetShapeDmaFramesAvailable
Obtém o número de quadros disponíveis para leitura.Sintaxe
Parâmetros
context _In_Tipo: SHAPE_DMA_CONTEXT* Ponteiro para uma estrutura SHAPE_DMA_CONTEXT.
Valor de retorno
Tipo: UINT32 Número de quadros disponíveis para leitura.Comentários
Você pode evitar comandos de DMA (Acesso Direto à Memória) bloqueados garantindo que o buffer de áudio seja suficientemente grande e que os dados sejam transmitidos em intervalos regulares (relacionados ao tamanho do buffer). Por exemplo, se você estiver transmitindo quatro quadros de hardware por vez, verifique se algum múltiplo desses quadros (pelo menos em buffer duplo, com oito quadros) está no buffer para que o hardware possa gravar à frente do ponteiro de leitura do título. Como alternativa, você pode impor o esvaziamento do buffer antes de enviar o próximo grafo de fluxo (consumir, atualizar o ponteiro de leitura de DMA e, em seguida, enviar o grafo de fluxo). Para obter mais detalhes, confira Comandos bloqueados em Visão geral do SHAPE. O sistema de DMA dá suporte à funcionalidade de leitura e gravação com conversão automática de float para inteiro e de inteiro para float. O sistema de DMA usa buffers circulares que contêm amostras desintercaladas em blocos de 128 amostras. O processador de DMA permite que o SHAPE (Scalable Hardware Audio Processing Engine) envie dados dos buffers de mixagem para a memória principal do sistema e recupere dados do sistema principal para os buffers de mixagem para processamento adicional. O DMA é feito por blocos, transferindo um quadro de áudio de dados por vez. Para facilitar dados intercalados por bloco, um valor de salto especifica o número de blocos de quadros de áudio na memória do sistema a serem ignorados (a partir do endereço base) ao ler ou gravar amostras. Portanto, fluxos multicanal exigem um contexto de DMA por canal. As amostras de dados de áudio são sempre lidas e gravadas como valores de 32 bits, inteiros ou float, conforme especificado no sinalizadorfloatConvert da estrutura SHAPE_DMA_CONTEXT. Observe que a direção do DMA (leitura ou gravação) é especificada no comando de DMA, não no contexto de DMA. Isso ajuda a reduzir a quantidade de largura de banda de dados. O mecanismo de DMA não tem processamento de sinal, mas pode executar a conversão de float para inteiro (ou de inteiro para float). Isso permite que a CPU do aplicativo processe amostras de dados em formato de ponto flutuante.
Para calcular o tamanho de um buffer de DMA, use a seguinte fórmula:
