Skip to content

Commit

Permalink
Add RemoveDecoderFromQueue (#565)
Browse files Browse the repository at this point in the history
  • Loading branch information
sbooth authored Feb 1, 2025
1 parent eb8323e commit 71fa753
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Sources/CSFBAudioEngine/Player/AudioPlayerNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ class AudioPlayerNode final {
/// Pops the next decoder from the decoder queue
Decoder _Nullable DequeueDecoder() noexcept;

bool RemoveDecoderFromQueue(Decoder _Nonnull decoder) noexcept;

void ClearQueue() noexcept
{
std::lock_guard<SFB::UnfairLock> lock(mQueueLock);
Expand Down
14 changes: 14 additions & 0 deletions Sources/CSFBAudioEngine/Player/AudioPlayerNode.mm
Original file line number Diff line number Diff line change
Expand Up @@ -623,6 +623,20 @@ bool PerformSeekIfRequired() noexcept
return decoder;
}

bool SFB::AudioPlayerNode::RemoveDecoderFromQueue(Decoder decoder) noexcept
{
#if DEBUG
assert(decoder != nil);
#endif /* DEBUG */

std::lock_guard<SFB::UnfairLock> lock(mQueueLock);
const auto iter = std::find(mQueuedDecoders.cbegin(), mQueuedDecoders.cend(), decoder);
if(iter == mQueuedDecoders.cend())
return false;
mQueuedDecoders.erase(iter);
return true;
}

SFB::AudioPlayerNode::Decoder SFB::AudioPlayerNode::CurrentDecoder() const noexcept
{
std::lock_guard<SFB::UnfairLock> lock(mDecoderLock);
Expand Down
6 changes: 6 additions & 0 deletions Sources/CSFBAudioEngine/Player/SFBAudioPlayerNode.mm
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,12 @@ - (BOOL)enqueueDecoder:(id <SFBPCMDecoding>)decoder error:(NSError **)error
return _impl->DequeueDecoder();
}

- (BOOL)removeDecoderFromQueue:(id<SFBPCMDecoding>)decoder
{
NSParameterAssert(decoder != nil);
return _impl->RemoveDecoderFromQueue(decoder);
}

- (void)clearQueue
{
_impl->ClearQueue();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,10 @@ NS_SWIFT_NAME(AudioPlayerNode) @interface SFBAudioPlayerNode : AVAudioSourceNode
/// Dequeues and returns the next decoder from the decoder queue
- (nullable id <SFBPCMDecoding>) dequeueDecoder;

/// Removes a decoder from the decoder queue
/// - parameter decoder: The decoder to remove
/// - returns: `YES` if the decoder was removed successfully
- (BOOL)removeDecoderFromQueue:(id<SFBPCMDecoding>)decoder;
/// Empties the decoder queue
- (void)clearQueue;

Expand Down

0 comments on commit 71fa753

Please sign in to comment.