diff options
Diffstat (limited to 'libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp')
-rw-r--r-- | libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp b/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp index bfb9a55e93..f9f87ff1b8 100644 --- a/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp +++ b/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp @@ -417,6 +417,28 @@ void BufferHubQueue::SetBufferRemovedCallback(BufferRemovedCallback callback) { on_buffer_removed_ = callback; } +pdx::Status<void> BufferHubQueue::FreeAllBuffers() { + // Clear all available buffers. + available_buffers_.Clear(); + + pdx::Status<void> last_error; // No error. + // Clear all buffers this producer queue is tracking. + for (size_t slot = 0; slot < BufferHubQueue::kMaxQueueCapacity; slot++) { + if (buffers_[slot] != nullptr) { + auto status = RemoveBuffer(slot); + if (!status) { + ALOGE( + "ProducerQueue::FreeAllBuffers: Failed to remove buffer at " + "slot=%d.", + slot); + last_error = status.error_status(); + } + } + } + + return last_error; +} + ProducerQueue::ProducerQueue(LocalChannelHandle handle) : BASE(std::move(handle)) { auto status = ImportQueue(); |