diff options
| author | 2023-08-31 15:09:15 +0100 | |
|---|---|---|
| committer | 2023-09-16 11:56:25 -0400 | |
| commit | 67e2d5c28b8423c4f3f1d5b00f87325684158a6f (patch) | |
| tree | e419a2bb6c064ddc69a49046705b6187772fee48 /src/audio_core/adsp/mailbox.h | |
| parent | Merge pull request #11519 from german77/system-policy (diff) | |
| download | yuzu-67e2d5c28b8423c4f3f1d5b00f87325684158a6f.tar.gz yuzu-67e2d5c28b8423c4f3f1d5b00f87325684158a6f.tar.xz yuzu-67e2d5c28b8423c4f3f1d5b00f87325684158a6f.zip | |
Reimplement HardwareOpus
Diffstat (limited to 'src/audio_core/adsp/mailbox.h')
| -rw-r--r-- | src/audio_core/adsp/mailbox.h | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/src/audio_core/adsp/mailbox.h b/src/audio_core/adsp/mailbox.h index c31b73717..1dd40ebfa 100644 --- a/src/audio_core/adsp/mailbox.h +++ b/src/audio_core/adsp/mailbox.h | |||
| @@ -3,6 +3,8 @@ | |||
| 3 | 3 | ||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include <span> | ||
| 7 | |||
| 6 | #include "common/bounded_threadsafe_queue.h" | 8 | #include "common/bounded_threadsafe_queue.h" |
| 7 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 8 | 10 | ||
| @@ -19,11 +21,6 @@ enum class Direction : u32 { | |||
| 19 | DSP, | 21 | DSP, |
| 20 | }; | 22 | }; |
| 21 | 23 | ||
| 22 | struct MailboxMessage { | ||
| 23 | u32 msg; | ||
| 24 | std::span<u8> data; | ||
| 25 | }; | ||
| 26 | |||
| 27 | class Mailbox { | 24 | class Mailbox { |
| 28 | public: | 25 | public: |
| 29 | void Initialize(AppMailboxId id_) { | 26 | void Initialize(AppMailboxId id_) { |
| @@ -35,25 +32,19 @@ public: | |||
| 35 | return id; | 32 | return id; |
| 36 | } | 33 | } |
| 37 | 34 | ||
| 38 | void Send(Direction dir, MailboxMessage&& message) { | 35 | void Send(Direction dir, u32 message) { |
| 39 | auto& queue = dir == Direction::Host ? host_queue : adsp_queue; | 36 | auto& queue = dir == Direction::Host ? host_queue : adsp_queue; |
| 40 | queue.EmplaceWait(std::move(message)); | 37 | queue.EmplaceWait(message); |
| 41 | } | 38 | } |
| 42 | 39 | ||
| 43 | MailboxMessage Receive(Direction dir, bool block = true) { | 40 | u32 Receive(Direction dir, std::stop_token stop_token = {}) { |
| 44 | auto& queue = dir == Direction::Host ? host_queue : adsp_queue; | 41 | auto& queue = dir == Direction::Host ? host_queue : adsp_queue; |
| 45 | MailboxMessage t; | 42 | return queue.PopWait(stop_token); |
| 46 | if (block) { | ||
| 47 | queue.PopWait(t); | ||
| 48 | } else { | ||
| 49 | queue.TryPop(t); | ||
| 50 | } | ||
| 51 | return t; | ||
| 52 | } | 43 | } |
| 53 | 44 | ||
| 54 | void Reset() { | 45 | void Reset() { |
| 55 | id = AppMailboxId::Invalid; | 46 | id = AppMailboxId::Invalid; |
| 56 | MailboxMessage t; | 47 | u32 t{}; |
| 57 | while (host_queue.TryPop(t)) { | 48 | while (host_queue.TryPop(t)) { |
| 58 | } | 49 | } |
| 59 | while (adsp_queue.TryPop(t)) { | 50 | while (adsp_queue.TryPop(t)) { |
| @@ -62,8 +53,8 @@ public: | |||
| 62 | 53 | ||
| 63 | private: | 54 | private: |
| 64 | AppMailboxId id{0}; | 55 | AppMailboxId id{0}; |
| 65 | Common::SPSCQueue<MailboxMessage> host_queue; | 56 | Common::SPSCQueue<u32> host_queue; |
| 66 | Common::SPSCQueue<MailboxMessage> adsp_queue; | 57 | Common::SPSCQueue<u32> adsp_queue; |
| 67 | }; | 58 | }; |
| 68 | 59 | ||
| 69 | } // namespace AudioCore::ADSP | 60 | } // namespace AudioCore::ADSP |