35class AVFAudioDecoder final :
public QPlatformAudioDecoder
39 struct DecodingContext;
42 AVFAudioDecoder(QAudioDecoder *parent);
43 ~AVFAudioDecoder() override;
45 QUrl source()
const override;
46 void setSource(
const QUrl &fileName) override;
48 QIODevice *sourceDevice()
const override;
49 void setSourceDevice(QIODevice *device) override;
51 void start() override;
54 QAudioFormat audioFormat()
const override;
55 void setAudioFormat(
const QAudioFormat &format) override;
57 QAudioBuffer read() override;
60 void handleNewAudioBuffer(QAudioBuffer);
61 void startReading(QAudioFormat);
63 void processInvalidMedia(QAudioDecoder::Error errorCode,
const QString& errorString);
64 void initAssetReader();
67 void waitUntilBuffersCounterLessMax();
69 void decBuffersCounter(uint val);
72 void invokeWithDecodingContext(std::weak_ptr<DecodingContext> weakContext, F &&f);
73 Q_INVOKABLE
void initAssetReaderImpl(AVAssetTrack *track, NSError *error);
77 QIODevice *m_device =
nullptr;
78 QAudioFormat m_format;
82 std::atomic<
int> m_buffersCounter = 0;
83 QQueue<QAudioBuffer> m_cachedBuffers;
85 AVURLAsset *m_asset =
nullptr;
87 AVFResourceReaderDelegate *m_readerDelegate =
nullptr;
88 dispatch_queue_t m_readingQueue;
89 dispatch_queue_t m_decodingQueue;
91 std::shared_ptr<DecodingContext> m_decodingContext;
92 QMutex m_buffersCounterMutex;
93 QWaitCondition m_buffersCounterCondition;
AVAssetReaderTrackOutput * m_readerOutput