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 |
---|---|
|
Il valore NumFramesWritten supera il valore NumFramesRequested specificato nella chiamata IAudioRenderClient::GetBuffer. |
|
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. |
|
Questa chiamata non è stata preceduta da una chiamata corrispondente a IAudioRenderClient::GetBuffer. |
|
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. |
|
Il servizio audio Di Windows non è in esecuzione. |
|
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 |