34class AVFAudioDecoder final :
public QPlatformAudioDecoder
38 struct DecodingContext;
41 AVFAudioDecoder(QAudioDecoder *parent);
42 ~AVFAudioDecoder() override;
44 QUrl source()
const override;
45 void setSource(
const QUrl &fileName) override;
47 QIODevice *sourceDevice()
const override;
48 void setSourceDevice(QIODevice *device) override;
50 void start() override;
53 QAudioFormat audioFormat()
const override;
54 void setAudioFormat(
const QAudioFormat &format) override;
56 QAudioBuffer read() override;
59 void handleNewAudioBuffer(QAudioBuffer);
60 void startReading(QAudioFormat);
62 void processInvalidMedia(QAudioDecoder::Error errorCode,
const QString& errorString);
63 void initAssetReader();
66 void waitUntilBuffersCounterLessMax();
68 void decBuffersCounter(uint val);
71 void invokeWithDecodingContext(std::weak_ptr<DecodingContext> weakContext, F &&f);
72 Q_INVOKABLE
void initAssetReaderImpl(AVAssetTrack *track, NSError *error);
76 QIODevice *m_device =
nullptr;
77 QAudioFormat m_format;
81 std::atomic<
int> m_buffersCounter = 0;
82 QQueue<QAudioBuffer> m_cachedBuffers;
84 AVURLAsset *m_asset =
nullptr;
86 AVFResourceReaderDelegate *m_readerDelegate =
nullptr;
87 dispatch_queue_t m_readingQueue;
88 dispatch_queue_t m_decodingQueue;
90 std::shared_ptr<DecodingContext> m_decodingContext;
91 QMutex m_buffersCounterMutex;
92 QWaitCondition m_buffersCounterCondition;
AVAssetReaderTrackOutput * m_readerOutput