127 qCDebug(qLcAudioDecoder) <<
"start";
128 auto checkNoError = [
this]() {
129 if (error() == QAudioDecoder::NoError)
132 durationChanged(kInvalidDuration);
133 positionChanged(kInvalidPosition);
141 m_decoder = std::make_unique<AudioDecoder>(m_audioFormat, defaultOptions);
142 connect(m_decoder.get(), &AudioDecoder::errorOccured,
this, &QFFmpegAudioDecoder::errorSignal);
144 connect(m_decoder.get(), &AudioDecoder::newAudioBuffer,
this,
145 &QFFmpegAudioDecoder::newAudioBuffer);
147 QFFmpeg::MediaDataHolder::Maybe media =
148 QFFmpeg::MediaDataHolder::create(m_url, m_sourceDevice, defaultOptions,
nullptr);
151 Q_ASSERT(media.value());
152 if (media.value()->streamInfo(QPlatformMediaPlayer::AudioStream).isEmpty())
153 error(QAudioDecoder::FormatError,
154 QLatin1String(
"The media doesn't contain an audio stream"));
156 m_decoder->setMedia(std::move(*media.value()));
158 auto [code, description] = media.error();
159 errorSignal(code, description);
165 m_decoder->setState(QMediaPlayer::PausedState);
169 m_decoder->nextBuffer();
173 durationChanged(std::chrono::milliseconds{ QFFmpeg::toUserDuration(m_decoder->duration()).get() });
235 switch (QMediaPlayer::Error(err)) {
236 case QMediaPlayer::NoError:
237 error(QAudioDecoder::NoError, errorString);
239 case QMediaPlayer::ResourceError:
240 error(QAudioDecoder::ResourceError, errorString);
242 case QMediaPlayer::FormatError:
243 error(QAudioDecoder::FormatError, errorString);
245 case QMediaPlayer::NetworkError:
247 case QMediaPlayer::AccessDeniedError:
248 error(QAudioDecoder::AccessDeniedError, errorString);