IAudioRenderClient::ReleaseBuffer-Methode (audioclient.h)
Die ReleaseBuffer-Methode gibt den Pufferspeicher frei, der beim vorherigen Aufruf der IAudioRenderClient::GetBuffer-Methode abgerufen wurde.
Syntax
HRESULT ReleaseBuffer(
[in] UINT32 NumFramesWritten,
[in] DWORD dwFlags
);
Parameter
[in] NumFramesWritten
Die Anzahl der Audioframes, die vom Client in das Datenpaket geschrieben werden. Der Wert dieses Parameters muss kleiner oder gleich der Größe des Datenpakets sein, wie im NumFramesRequested-Parameter angegeben, der an die IAudioRenderClient::GetBuffer-Methode übergeben wird.
[in] dwFlags
Die Pufferkonfigurationsflags. Der Aufrufer kann diesen Parameter entweder auf 0 oder auf den folgenden _AUDCLNT_BUFFERFLAGS Enumerationswert (ein Flagbit) festlegen:
AUDCLNT_BUFFERFLAGS_SILENT
Wenn dieses Flagbit festgelegt ist, behandelt die Audio-Engine das Datenpaket unabhängig von den im Paket enthaltenen Datenwerten so, als ob es Stille enthält. Durch dieses Flag muss der Client keine Stilledaten explizit in den Renderingpuffer schreiben.
Rückgabewert
Wenn die Methode erfolgreich ist, wird S_OK zurückgegeben. Wenn ein Fehler auftritt, können mögliche Rückgabecodes die in der folgenden Tabelle gezeigten Werte umfassen, sind jedoch nicht darauf beschränkt.
Rückgabecode | Beschreibung |
---|---|
|
Der NumFramesWritten-Wert überschreitet den NumFramesRequested-Wert , der im vorherigen IAudioRenderClient::GetBuffer-Aufruf angegeben wurde. |
|
Der Stream ist exklusiver Modus und verwendet ereignisgesteuerte Pufferung, aber der Client hat versucht, ein Paket freizugeben, das nicht die Größe des Puffers hatte. |
|
Diesem Aufruf war kein entsprechender Aufruf von IAudioRenderClient::GetBuffer vorangestellt. |
|
Das Audioendpunktgerät wurde getrennt, oder die Audiohardware oder die zugehörigen Hardwareressourcen wurden neu konfiguriert, deaktiviert, entfernt oder anderweitig für die Verwendung nicht verfügbar gemacht. |
|
Der Windows-Audiodienst wird nicht ausgeführt. |
|
Der Parameter dwFlags ist kein gültiger Wert. |
Hinweise
Der Client muss die gleiche Anzahl von Frames freigeben, die er beim vorherigen Aufruf der IAudioRenderClient::GetBuffer-Methode angefordert hat. Die einzige Ausnahme von dieser Regel besteht darin, dass der Client Immer ReleaseBuffer aufrufen kann, um 0 Frames freizugeben (es sei denn, der Stream ist exklusiver Modus und verwendet ereignisgesteuerte Pufferung).
Dieses Verhalten bietet dem Client eine bequeme Möglichkeit, ein zuvor angefordertes Paket der Länge 0 zu "freigeben". In diesem Fall ist der Aufruf von ReleaseBuffer optional. Nach dem Aufrufen von GetBuffer zum Abrufen eines Pakets der Länge 0 hat der Client die Möglichkeit , ReleaseBuffer nicht aufzurufen, bevor GetBuffer erneut aufgerufen wird.
Wenn der vorherige GetBuffer-Aufruf ein Paket mit nichtzero-Größe abgerufen hat, wird außerdem der Aufruf von ReleaseBuffer mit NumFramesRequested auf 0 erfolgreich ausgeführt (es sei denn, der Stream ist im exklusiven Modus und verwendet ereignisgesteuerte Pufferung). Die Bedeutung des Aufrufs besteht darin, dass der Client keine Daten in das Paket geschrieben hat, bevor es freigegeben wird. Daher behandelt die Methode den Teil des Puffers, der durch das Paket dargestellt wird, als nicht verwendet und stellt diesen Teil des Puffers beim nächsten GetBuffer-Aufruf wieder für den Client zur Verfügung.
Clients sollten übermäßige Verzögerungen zwischen dem GetBuffer-Aufruf , der einen Puffer abruft, und dem ReleaseBuffer-Aufruf vermeiden, der den Puffer freigibt. Bei der Implementierung der Audio-Engine wird davon ausgegangen, dass der GetBuffer-Aufruf und der entsprechende ReleaseBuffer-Aufruf innerhalb desselben Pufferverarbeitungszeitraums erfolgen. Clients, die das Freigeben eines Puffers um mehr als einen Zeitraum verzögern, riskieren den Verlust von Beispieldaten.
Codebeispiele, die die ReleaseBuffer-Methode aufrufen, finden Sie in den folgenden Themen:
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | audioclient.h |