Serenity Operating System
at master 64 lines 1.5 kB view raw
1/* 2 * Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include "UserSampleQueue.h" 8 9namespace Audio { 10 11void UserSampleQueue::append(FixedArray<Sample>&& samples) 12{ 13 Threading::MutexLocker lock(m_sample_mutex); 14 if (m_samples_to_discard != 0) 15 m_backing_samples = m_backing_samples.release_slice(m_samples_to_discard); 16 m_backing_samples.append(move(samples)); 17 fix_spans(); 18} 19 20void UserSampleQueue::clear() 21{ 22 discard_samples(size()); 23} 24 25void UserSampleQueue::fix_spans() 26{ 27 Threading::MutexLocker lock(m_sample_mutex); 28 m_enqueued_samples = m_backing_samples.spans(); 29 m_samples_to_discard = 0; 30} 31 32Sample UserSampleQueue::operator[](size_t index) 33{ 34 Threading::MutexLocker lock(m_sample_mutex); 35 return m_enqueued_samples[index]; 36} 37 38void UserSampleQueue::discard_samples(size_t count) 39{ 40 Threading::MutexLocker lock(m_sample_mutex); 41 m_samples_to_discard += count; 42 m_enqueued_samples = m_enqueued_samples.slice(count); 43} 44 45size_t UserSampleQueue::size() 46{ 47 Threading::MutexLocker lock(m_sample_mutex); 48 return m_enqueued_samples.size(); 49} 50 51size_t UserSampleQueue::remaining_samples() 52{ 53 Threading::MutexLocker lock(m_sample_mutex); 54 VERIFY(m_backing_samples.size() >= m_samples_to_discard); 55 return m_backing_samples.size() - m_samples_to_discard; 56} 57 58bool UserSampleQueue::is_empty() 59{ 60 Threading::MutexLocker lock(m_sample_mutex); 61 return m_enqueued_samples.is_empty(); 62} 63 64}