Сохрани накопленные исправления аудио, async и диагностики
This commit is contained in:
1 parent
b1e3193899
commit
bdcf8b5634
59 files changed
+4611
-1441
No files matched your search
@@ -0,0 +1,38 @@
|
||||
#pragma once
|
||||
|
||||
#include "miniaudio.h"
|
||||
#include <QElapsedTimer>
|
||||
#include <atomic>
|
||||
#include <functional>
|
||||
|
||||
/* Один владелец в GUI-потоке. Callback публикует только прогресс и уведомления;
|
||||
* close() дожидается worker перед освобождением callback и его состояния. */
|
||||
class AudioDevice {
|
||||
public:
|
||||
using Callback = std::function<void(const void*, void*, unsigned int)>;
|
||||
AudioDevice();
|
||||
~AudioDevice();
|
||||
AudioDevice(const AudioDevice&) = delete;
|
||||
AudioDevice& operator=(const AudioDevice&) = delete;
|
||||
bool init(ma_context* context, ma_device_config config, const char* role, uint64_t session, Callback callback);
|
||||
bool start();
|
||||
void close();
|
||||
bool needsRecovery();
|
||||
bool retryReady() const;
|
||||
void retryLater();
|
||||
void retryNow();
|
||||
bool initialized() const { return m_device != nullptr; }
|
||||
ma_device* device() const { return m_device; }
|
||||
private:
|
||||
static void data(ma_device* device, void* out, const void* in, ma_uint32 frames);
|
||||
static void notification(const ma_device_notification* event);
|
||||
ma_device* m_device = nullptr;
|
||||
Callback m_callback;
|
||||
const char* m_role = "audio";
|
||||
QElapsedTimer m_clock;
|
||||
std::atomic<uint64_t> m_frames{0};
|
||||
std::atomic<bool> m_suspended{false};
|
||||
uint64_t m_seenFrames = 0;
|
||||
qint64 m_progressAt = 0, m_retryAt = 0;
|
||||
int m_retryDelay = 250;
|
||||
};
|
||||
Reference in new issue
Block a user