Condividi tramite


Metodo IAudioRenderClient::ReleaseBuffer (audioclient.h)

Il metodo ReleaseBuffer rilascia lo spazio del buffer acquisito nella chiamata precedente al metodo IAudioRenderClient::GetBuffer .

Sintassi

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesWritten,
  [in] DWORD  dwFlags
);

Parametri

[in] NumFramesWritten

Numero di fotogrammi audio scritti dal client nel pacchetto di dati. Il valore di questo parametro deve essere minore o uguale alla dimensione del pacchetto di dati, come specificato nel parametro NumFramesRequested passato al metodo IAudioRenderClient::GetBuffer .

[in] dwFlags

Flag di configurazione del buffer. Il chiamante può impostare questo parametro su 0 o sul valore di enumerazione _AUDCLNT_BUFFERFLAGS seguente (bit di flag):

AUDCLNT_BUFFERFLAGS_SILENT

Se questo bit di flag è impostato, il motore audio considera il pacchetto di dati come se contiene il silenzio indipendentemente dai valori di dati contenuti nel pacchetto. Questo flag elimina la necessità del client di scrivere in modo esplicito i dati di silenzio nel buffer di rendering.

Valore restituito

Se il metodo ha esito positivo, viene restituito S_OK. Se ha esito negativo, i codici restituiti possibili includono, ma non sono limitati a, i valori visualizzati nella tabella seguente.

Codice restituito Descrizione
AUDCLNT_E_INVALID_SIZE
Il valore NumFramesWritten supera il valore NumFramesRequested specificato nella chiamata IAudioRenderClient::GetBuffer.
AUDCLNT_E_BUFFER_SIZE_ERROR
Il flusso è in modalità esclusiva e usa il buffer basato su eventi, ma il client ha tentato di rilasciare un pacchetto che non era la dimensione del buffer.
AUDCLNT_E_OUT_OF_ORDER
Questa chiamata non è stata preceduta da una chiamata corrispondente a IAudioRenderClient::GetBuffer.
AUDCLNT_E_DEVICE_INVALIDATED
Il dispositivo endpoint audio è stato scollegato o l'hardware audio o le risorse hardware associate sono state riconfigurate, disabilitate, rimosse o altrimenti non disponibili per l'uso.
AUDCLNT_E_SERVICE_NOT_RUNNING
Il servizio audio Di Windows non è in esecuzione.
E_INVALIDARG
Parametro dwFlags non è un valore valido.

Commenti

Il client deve rilasciare lo stesso numero di frame richiesti nella chiamata precedente al metodo IAudioRenderClient::GetBuffer . L'unica eccezione a questa regola è che il client può sempre chiamare ReleaseBuffer per rilasciare 0 frame (a meno che il flusso non sia in modalità esclusiva e usi il buffer basato su eventi).

Questo comportamento consente al client di "rilasciare" un pacchetto richiesto in precedenza di lunghezza 0. In questo caso, la chiamata a ReleaseBuffer è facoltativa. Dopo aver chiamato GetBuffer per ottenere un pacchetto di lunghezza 0, il client ha la possibilità di non chiamare ReleaseBuffer prima di chiamare nuovamente GetBuffer .

Inoltre, se la chiamata GetBuffer precedente ha ottenuto un pacchetto di dimensioni non zero, chiamando ReleaseBuffer con NumFramesRequested impostato su 0 avrà esito positivo (a meno che il flusso non sia in modalità esclusiva e usi il buffer basato su eventi). Il significato della chiamata è che il client non ha scritto dati nel pacchetto prima di rilasciarlo. Pertanto, il metodo considera la parte del buffer rappresentata dal pacchetto come inutilizzata e renderà nuovamente disponibile questa parte del buffer nel client nella chiamata GetBuffer successiva.

I client devono evitare ritardi eccessivi tra la chiamata GetBuffer che acquisisce un buffer e la chiamata ReleaseBuffer che rilascia il buffer. L'implementazione del motore audio presuppone che la chiamata GetBuffer e la chiamata ReleaseBuffer corrispondente si verifichino entro lo stesso periodo di elaborazione del buffer. Client che ritarda il rilascio di un buffer per più di un periodo di rischio di perdita dei dati di esempio.

Per esempi di codice che chiamano il metodo ReleaseBuffer , vedere gli argomenti seguenti:

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione audioclient.h

Vedi anche

IAudioClient::Initialize

Interfaccia IAudioRenderClient

IAudioRenderClient::GetBuffer