5 #include "../../fifo_templates.h"
10 class DLL_PREFIX SOUND_BUFFER_QT : public QIODevice
14 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
15 using QIODeviceBase::OpenMode;
16 using QIODeviceBase::OpenModeFlag;
18 using QIODevice::OpenMode;
19 using QIODevice::OpenModeFlag;
21 using BUFFER_TYPE = FIFO_BASE::LOCKED_RINGBUFFER<uint8_t>;
23 std::shared_ptr<BUFFER_TYPE>m_buffer;
25 SOUND_BUFFER_QT(uint64_t depth = 0, QObject *parent = nullptr);
28 virtual bool isSequential() const override;
29 virtual bool open(OpenMode flags) override;
30 virtual void close() override;
32 virtual qint64 size() const override;
34 virtual qint64 bytesToWrite() const override;
35 virtual qint64 bytesAvailable() const override;
37 virtual qint64 pos() const override;
38 virtual bool seek(qint64 pos) override;
40 virtual bool atEnd() const override;
41 virtual bool reset() override;
42 // Internal Functions.
44 virtual qint64 readData(char *data, qint64 len) override;
45 virtual qint64 writeData(const char *data, qint64 len) override;
47 // For thread safing calling.
48 std::atomic<qint64> wroteFromBefore;
49 std::atomic<bool> is_emitted;
53 virtual bool resize(qint64 sz);
54 virtual qint64 real_buffer_size();
55 virtual qint64 read_from_buffer(char *data, qint64 len);
56 virtual qint64 write_to_buffer(const char *data, qint64 len);
58 void _emit_for_write();
60 int _signal_for_write();