39class AVFAudioDecoder final :
public QPlatformAudioDecoder
43 struct DecodingContext;
46 AVFAudioDecoder(QAudioDecoder *parent);
47 ~AVFAudioDecoder() override;
49 QUrl source()
const override;
50 void setSource(
const QUrl &fileName) override;
52 QIODevice *sourceDevice()
const override;
53 void setSourceDevice(QIODevice *device) override;
55 void start() override;
58 QAudioFormat audioFormat()
const override;
59 void setAudioFormat(
const QAudioFormat &format) override;
61 QAudioBuffer read() override;
64 void handleNewAudioBuffer(QAudioBuffer);
67 void processInvalidMedia(QAudioDecoder::Error errorCode,
const QString& errorString);
68 void initAssetReader();
71 void waitUntilBuffersCounterLessMax();
73 void decBuffersCounter(uint val);
76 void invokeWithDecodingContext(std::weak_ptr<DecodingContext> weakContext, F &&f);
77 Q_INVOKABLE
void initAssetReaderImpl(AVAssetTrack *track, NSError *error);
81 QIODevice *m_device =
nullptr;
82 QAudioFormat m_format;
86 std::atomic<
int> m_buffersCounter = 0;
87 QQueue<QAudioBuffer> m_cachedBuffers;
89 AVURLAsset *m_asset =
nullptr;
91 AVFResourceReaderDelegate *m_readerDelegate =
nullptr;
92 dispatch_queue_t m_readingQueue;
93 dispatch_queue_t m_decodingQueue;
95 std::shared_ptr<DecodingContext> m_decodingContext;
96 QMutex m_buffersCounterMutex;
97 QWaitCondition m_buffersCounterCondition;
AVAssetReaderTrackOutput * m_readerOutput